该列未完全折叠

The column is not completly collapsed

我正在尝试使用以下代码根据条件折叠列:

<DataGridTextColumn Header="MyColumn" Binding="{Binding MyProperty}">
    <DataGridTextColumn.HeaderStyle>
        <Style TargetType="{x:Type DataGridColumnHeader}">
            <Setter Property="Width" Value="0cm"/>
            <Setter Property="Visibility" Value="Collapsed"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=ThisView, Path=DataContext.MyboolProperty}" Value="true">
                    <Setter Property="Width" Value="2.5cm"/>
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>

问题是栏目没有完全折叠,我能看到一部分栏目。

我也试过这段代码:

<DataGridTextColumn Header="MyColumn" Binding="{Binding MyProperty}"
        Width="0cm"
        Visibility="Collapsed">
    <DataGridTextColumn.HeaderStyle>
        <Style TargetType="{x:Type DataGridColumnHeader}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=ThisView, Path=DataContext.MyboolProperty}" Value="true">
                    <Setter Property="Width" Value="2.5cm"/>
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>

在这种情况下,该列会按预期折叠,但如果 属性 触发器为真,该列仍会折叠。

我也试过这个选项:

<DataGridTextColumn Header="MyColumn" Binding="{Binding MyProperty}">
    <DataGridTextColumn.HeaderStyle>
        <Style TargetType="{x:Type DataGridColumnHeader}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=ThisView, Path=DataContext.MyboolProperty}" Value="true">
                    <Setter Property="Width" Value="2.5cm"/>
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=ThisView, Path=DataContext.MyboolProperty}" Value="false">
                    <Setter Property="Width" Value="0cm"/>
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>

但行为与第一个选项相同,它不是完全折叠但在触发器的 属性 为真时有效。

您的数据触发器位于列 header 模板内,因此它只能更改列 header 的属性(不是完整的列,即单元格).

DataGridTextColumn没有Style,所以不能用DataTrigger。但是转换器应该可以。

然而,另一个问题是列不在可视化树中,因此您不能使用 ElementNameRelativeSource,它们根本不起作用。然而,有一个简单的 workaround。那么您的专栏将如下所示:

<Window.Resources>
    <BooleanToVisibilityConverter x:Key="converter" />
    <local:BindingProxy x:Key="proxy" Data="{Binding}" />
</Window.Resources>

...

<DataGridTextColumn Header="MyColumn"
                    Binding="{Binding MyProperty}"
                    Visibility="{Binding Data.MyboolProperty, Source={StaticResource proxy}, Converter={StaticResource converter}}" />