C# 柱未完全折叠

C# 柱未完全折叠,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,我正在尝试根据以下代码的条件折叠柱: <DataGridTextColumn Header="MyColumn" Binding="{Binding MyProperty}"> <DataGridTextColumn.HeaderStyle> <Style TargetType="{x:Type DataGridColumnHeader}"> <Setter Property="Width" Value="

我正在尝试根据以下代码的条件折叠柱:

<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>

在本例中,该列按预期折叠,但如果触发器为true,则该列仍然折叠

我也尝试过这个选项:

<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>


但该行为与第一个选项相同,它不是完全折叠的,但当触发器的属性为true时它会工作。

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

对于
DataGridTextColumn
,没有
样式
,因此不能使用
DataTrigger
。但是转换器应该可以

然而,另一个问题是列不在可视化树中,所以不能使用
ElementName
RelativeSource
,它们根本不起作用。然而,有一个简单的问题。然后,您的列将如下所示:

<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}}" />

...

数据触发器正在更改列标题的可见性,而不是列的可见性(如第二个示例所示)。非常感谢您提供的解决方案,并解释了更一般的基本概念。