Можно ли использовать триггеры для Grid RowDefinitions? - PullRequest
13 голосов
/ 24 февраля 2011

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

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

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

Ответы [ 2 ]

18 голосов
/ 24 февраля 2011

Я думаю, что единственная проблема с вашим 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>
5 голосов
/ 08 августа 2014

Я знаю, что этому посту 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.

...