Колонна не полностью свернута - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь свернуть столбец в соответствии с условием с этим кодом:

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

1 Ответ

0 голосов
/ 25 января 2019

Ваш триггер данных находится внутри столбца заголовок шаблона, поэтому он может изменять только свойства заголовка столбца (не полный столбец, т.е. ячейки).

Нет Styleдля 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}}" />
...