GridSplitter 会覆盖 ColumnDefinition 的样式触发器吗?
我遇到了一个奇怪的问题...
看起来使用 GridSplitter 调整网格列的大小会禁用(或以其他方式停用)网格列上定义的触发器。
这是我的设置:
网格有 3 列,定义如下:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition>
<ColumnDefinition.Style>
<Style>
<Setter Property="ColumnDefinition.Width" Value="Auto"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=OpenItemViewModels.Count}" Value="0">
<Setter Property="ColumnDefinition.Width" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
<ColumnDefinition>
<ColumnDefinition.Style>
<Style>
<Setter Property="ColumnDefinition.Width" Value="4*"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=OpenItemViewModels.Count}" Value="0">
<Setter Property="ColumnDefinition.Width" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
</Grid.ColumnDefinitions>
预期是,当第三列中没有构成控件的 ItemsSource 的项目时,将向第二列分配 0 宽度,第三列(分别承载 GridSplitter 和辅助项控件)。
只要我不触摸拆分器(当辅助控件中的所有选项卡都关闭时,只有第一列保持可见),此功能就可以正常工作。
如果我移动分隔符,从而有效地改变列##0和2之间的比例,问题就会开始。在这种情况下,当右侧控件中的所有项目都关闭时,这些列的宽度不会重置。
我怀疑这与 GridSplitter “推翻”我在 XAML 中的定义有关。
有人可以证实/反驳这个理论,并建议如何解决这个问题吗?
I ran into a strange issue...
It looks like resizing Grid's columns using a GridSplitter disables (or otherwise deactivates) the trigger defined on a Grid's column.
Here's my setup:
A Grid has 3 columns, defined as follows:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition>
<ColumnDefinition.Style>
<Style>
<Setter Property="ColumnDefinition.Width" Value="Auto"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=OpenItemViewModels.Count}" Value="0">
<Setter Property="ColumnDefinition.Width" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
<ColumnDefinition>
<ColumnDefinition.Style>
<Style>
<Setter Property="ColumnDefinition.Width" Value="4*"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=OpenItemViewModels.Count}" Value="0">
<Setter Property="ColumnDefinition.Width" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
</Grid.ColumnDefinitions>
The expectation is that when there are no items that constitute ItemsSource for the control in the third column, 0 width will be assigned to the second and third columns (hosting the GridSplitter and the auxiliary items control, respectively).
This works well as long as I don't touch the Splitter (when all the tabs in the auxiliary control are closed, only the first column remains visible).
The problems start if I move the splitter, thus effectively changing the proportion between columns ##0 and 2. In such scenario, these columns' width is not reset when all the items in the right-hand control are closed.
I suspect this has something to do with the GridSplitter "overruling" my definitions in XAML.
Can someone please confirm / disprove this theory, and suggest how to work around the problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我对行定义也有同样的问题。 Gridsplitter 将覆盖我们在样式或设置器中提供的任何内容。可以使用动画来解决(因为动画在依赖属性值解析中具有最高优先级)。对第三列执行相同的操作。
I had the same problem for rowdefinition. Gridsplitter will override whatever we give in style or setters. It can be solved using animation (since animation has the highest priority in dependency property value resolution). Do the same for the third column.
我想出了一个帮助器类,可以帮助解决可折叠列/行的问题,这些列/行也可以使用 GridSplitter 调整大小。
标记然后像这样
I came up with a helper class that helps solve the problem of collapsible columns/rows that are also resized with GridSplitter.
markup then goes like this
我采用了Terrence的解决方案(Ghostriders回答中的评论)并修复了一个小问题,即有时未正确应用默认值。
源代码可以在这里找到: https://gist.github.com/medarion/5ff6d04be5630748e8bf92006d0b4472
用法不变:
I took Terrence's solution (comment in Ghostriders answer) and fixed a little problem that the default values were sometimes not correctly applied.
The source can be found here: https://gist.github.com/medarion/5ff6d04be5630748e8bf92006d0b4472
Usage is unchanged:
我遇到了同样的问题...
我唯一能解决的问题是这样的:
背后的代码:
这不是我喜欢的方式,但尝试在列定义上使用样式触发器不起作用。
I had the same problem...
The only thing I was able to work out was something like this:
And the code behind:
It's not the way I would prefer to do this, but trying to use a style trigger on the column definition just does not work.