- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望使用网格作为我的顶级布局。网格将有 1 列和 n 行。网格中的每一行还应包含一个 3 列 1 行的网格。第二列是 GridSplitter,我尝试使用 SharedSizeGroup,以便更改所有嵌套网格中第一列的大小。
这就是我所拥有的...并且它可以工作!!...好吧...如果您单击拆分器并调整大小而不放开它,它就可以工作...但是出于某种原因,如果您调整某些内容的大小并让移动鼠标,然后尝试使用似乎“粘住”的不同行来调整大小。
有什么想法吗?
<!-- Parent Grid -->
<Grid Grid.IsSharedSizeScope="True">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<!-- First Grid -->
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A" Width="Auto"></ColumnDefinition>
<ColumnDefinition SharedSizeGroup="B" Width="Auto"></ColumnDefinition>
<ColumnDefinition SharedSizeGroup="C" Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label Grid.Column="0">One-Left</Label>
<GridSplitter Grid.Column="1" Width="5" Background="DarkGray"></GridSplitter>
<Label Grid.Column="2">One-Right</Label>
</Grid>
<!-- Second Grid -->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A" Width="Auto"></ColumnDefinition>
<ColumnDefinition SharedSizeGroup="B" Width="Auto"></ColumnDefinition>
<ColumnDefinition SharedSizeGroup="C" Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label Grid.Column="0">Two-Left</Label>
<GridSplitter Grid.Column="1" Width="5" Background="DarkGray"></GridSplitter>
<Label Grid.Column="2">Two-Right</Label>
</Grid>
</Grid>
最佳答案
重新发布我的回答 ms connect :
您通常可以通过不使用 SharedSizeGroup 并将所有共享大小绑定(bind)到一个对象(例如您的数据上下文)上的单个属性来解决此问题:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:WpfApplication3"
Height="350" Width="525" Title="MainWindow">
<Window.DataContext>
<my:MainWindowData Width0="1*" Width1="1*" />
</Window.DataContext>
<Window.Resources>
<DataTemplate x:Key="dt">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding Path=Width0, Mode=TwoWay}" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="{Binding Path=Width1, Mode=TwoWay}" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Content="{Binding Width0}" />
<GridSplitter Grid.Column="1" Width="10" ResizeBehavior="PreviousAndNext" ResizeDirection="Columns" />
<Button Grid.Column="2" Content="{Binding Width1}" />
</Grid>
</DataTemplate>
</Window.Resources>
<StackPanel>
<ContentPresenter Content="{Binding}" ContentTemplate="{StaticResource dt}" />
<ContentPresenter Content="{Binding}" ContentTemplate="{StaticResource dt}" />
</StackPanel>
</Window>
其中 Width0 和 Width1 是匹配类型 (GridLength)。它适用于任何类型的大小调整(固定、星型和自动)的任何组合。
更新:
或者也许更好的是,您可以纯粹在 XAML 中完成此操作,而不是绑定(bind)到 DataContext。只需定义一个带有命名列的主网格(不一定是父网格,但您需要某种方式来引用它),然后按名称绑定(bind)到它们。
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="350" Width="525" Title="MainWindow">
<!-- shared sizing used only on fixed size columns therefore safe -->
<!-- alternatively you can hardcode width of splitter column -->
<Grid Name="masterGrid" Grid.IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" Name="masterColumn0" />
<ColumnDefinition Width="Auto" SharedSizeGroup="masterColumn1" />
<ColumnDefinition Width="1*" Name="masterColumn2" />
</Grid.ColumnDefinitions>
<StackPanel Grid.ColumnSpan="3">
<StackPanel.Resources>
<DataTemplate x:Key="dt">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding Path=Width, Mode=TwoWay, ElementName=masterColumn0}" />
<ColumnDefinition Width="Auto" SharedSizeGroup="masterColumn1" />
<ColumnDefinition Width="{Binding Path=Width, Mode=TwoWay, ElementName=masterColumn2}" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Content="{Binding Path=Width, Mode=TwoWay, ElementName=masterColumn0}" />
<Button Grid.Column="2" Content="{Binding Path=Width, Mode=TwoWay, ElementName=masterColumn2}" />
</Grid>
</DataTemplate>
</StackPanel.Resources>
<ContentPresenter ContentTemplate="{StaticResource dt}" />
<ContentPresenter ContentTemplate="{StaticResource dt}" />
</StackPanel>
<GridSplitter Grid.Column="1" Width="10" ResizeBehavior="PreviousAndNext" ResizeDirection="Columns" ShowsPreview="True" />
</Grid>
</Window>
这增加了使用所有网格共享的单个网格拆分器的好处。
关于WPF SharedSizeGroup GridSplitter 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1715124/
我希望 GridSplitter 使 TreeView 更大,以便更容易查看 TreeView 的内容。似乎找不到合适的地方放置分路器
我想要一个简单的 3 列网格,其中包含可调整大小的列和 80 的 MinWidth。 代码如下所示: 但它并没有以我想要和
我正在创建一个 3 列 UI,列之间有网格拆分器。我需要保存列的状态,这样如果用户关闭并重新打开应用程序,它看起来就像他们离开它一样。但我也试图让列按比例拆分——我的意思是,如果你拉伸(stretch
我想要一个带有两行和它们之间的分隔符的网格布局。行的最小高度应为 80 像素。 这段代码效果很好:
我有一个带有 3 列网格的应用程序。第一列和第二列之间的网格拆分器工作得很好。为了让分流器位于第二列和第三列之间,我为分流器创建了一个列。 (所以现在第三列实际上是第四列。) 当我调整其他列的大小时,
简单的 GridSplitter 在某种意义上表现得很奇怪,当我将它向左移动超出 MinWidth 时,另一列会无限扩展。我在这里缺少什么?
一旦使用 gridsplitter 调整网格大小,当其他行折叠时,该行 * 将不会回收空间。 我在主详细信息 View 中有以下三行网格。顶部有一个数据网格,中间有一个分割器,最后一行有一个内容控制
我有以下网格 我的GridSplitter位于第3行(第
我正在从 WinForms 迁移到 WPF,我需要自定义绘制一个 gridsplitter,如下所示。这是我的 WinForms 实现: 在 WinForms 中很容易实现。我继承自 Splitter
我刚开始尝试使用 gridsplitter 并偶然发现了一个非常奇怪的行为,我似乎无法修复它。显然其他人也有类似的问题(根据谷歌),但没有任何有用的评论。 我有一个包含 2 行的网格。启动时,底部的
我是 WPF 新手。我这样声明我的 Grid: 我基本上希望宽度为 5 的第
我是 WPF 的新手,遇到了一个小但令人沮丧的问题。 我有一个包含两行和两列的网格。第一行包含一个菜单栏,第二行包含左侧的一列(包含一个列表框)和右侧的一列(包含一个列表框)。 它还包含一个 Grid
我有这个: 我正在尝试保存和恢复拆分器位置。我正在使用 grid.C
使用下面的 XAML,当我将 GridSplitter 向左拖动时,它会将元素推出窗口。 如何将所有元素保留在窗口框架内?
我有以下 XAML:
我是 wpf 的初学者,今天我遇到一个奇怪的问题,如果我向网格列添加动画,gridsplitter 停止工作,下面是代码片段,这是一个毫无意义但很简单的测试代码,除了当鼠标进入右列,宽度从15扩大到1
我正在使用 GridSplitter在我的 WPF 应用程序中,并希望将其设置为代码中的特定初始位置。我被 GridSplitter 的行为困住了将特定值设置为 Height 时关联的属性 RowDe
我有一个由 GridSplitter 分隔的 2 列的网格,使用以下 XAML 代码: 问题:右侧列的 MinWid
我正在使用 Microsoft.Toolkit.Uwp.UI.Controls 中的 GridSplitter。在用户使用网格拆分器调整两列大小后,是否有办法重置调整大小并使网格的列宽恢复到调整大小之
我希望使用网格作为我的顶级布局。网格将有 1 列和 n 行。网格中的每一行还应包含一个 3 列 1 行的网格。第二列是 GridSplitter,我尝试使用 SharedSizeGroup,以便更改所
我是一名优秀的程序员,十分优秀!