我遇到了一个奇怪的问题...
看起来使用GridSplitter调整Grid列的大小可以禁用(或停用)在Grid列上定义的触发器。
这是我的设置:
网格具有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中的定义有关。
有人可以确认/反驳这一理论,并提出如何解决该问题的建议吗?
最佳答案
对于行定义,我遇到了同样的问题。 Gridsplitter将覆盖我们提供的样式或设置器中的任何内容。可以使用动画解决(因为动画在依赖项属性值解析中具有最高优先级)。对第三列执行相同的操作。
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition>
<ColumnDefinition.Style>
<Style>
<Setter Property="ColumnDefinition.Width" Value="Auto" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=OpenItemViewModels.Count}" Value="0">
<DataTrigger.EnterActions>
<BeginStoryboard Name="BeginStoryboard1">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Width">
<ObjectAnimationUsingKeyFrames.KeyFrames>
<DiscreteObjectKeyFrame KeyTime="0:0:0"
Value="{x:Static GridLength.Auto}" />
</ObjectAnimationUsingKeyFrames.KeyFrames>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="BeginStoryboard1" />
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
关于wpf - GridSplitter覆盖ColumnDefinition的样式触发器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8548461/