Можно ли использовать триггеры для Grid RowDefinitions?

У меня есть сетка, строки которой необходимо динамически изменять на основе модели представления. Я хотел бы сделать что-то вроде следующего:

<RowDefinition Height="2*">
    <RowDefinition.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=ShowSection}" Value="True">
                    <Setter Property="RowDefinition.Height" Value="2*"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=ShowSection}" Value="False">
                    <Setter Property="RowDefinition.Height" Value="0"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </RowDefinition.Style>
</RowDefinition>

Это компиляция, не вызывает ошибок, но, похоже, не имеет никакого эффекта. Есть ли что-то, что мне не хватает, или сетка не позволяет изменять размеры строк после того, как форма была нарисована или что-то в этом роде?

Ответ 1

Я думаю, что единственная проблема с вашим кодом Xaml заключается в том, что вы перезаписываете DataTrigger, указав высоту на RowDefinition. Попробуйте использовать вместо этого Setter

<RowDefinition>
    <RowDefinition.Style>
        <Style>
            <Setter Property="RowDefinition.Height" Value="2*"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=ShowSection}" Value="True">
                    <Setter Property="RowDefinition.Height" Value="2*"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=ShowSection}" Value="False">
                    <Setter Property="RowDefinition.Height" Value="0"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </RowDefinition.Style>
</RowDefinition>

Ответ 2

Я знаю, что этому посту 3 года, но все же это может помочь кому-то.

<RowDefinition>
    <RowDefinition.Style>
        <Style TargetType="RowDefinition">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=ShowSection}" Value="True">
                    <Setter Property="Height" Value="2*"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=ShowSection}" Value="False">
                    <Setter Property="Height" Value="0"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </RowDefinition.Style>
</RowDefinition>

Я был в той же ситуации, мне удалось заставить его работать, установив TargetType в RowDefinition.