Можно ли использовать триггеры для 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.