我遇到了一个奇怪的问题...
看起来使用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/

10-13 07:33