是否可以在Grid RowDefinitions上使用Triggers?

时间:2011-02-24 13:41:14

标签: .net wpf xaml grid datatrigger

我有一个网格,其行需要根据视图模型动态调整大小。我想做类似以下的事情:

<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 个答案:

答案 0 :(得分:18)

我认为您的Xaml代码的唯一问题是您通过在RowDefinition上明确设置Height来覆盖DataTrigger。尝试使用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>

答案 1 :(得分:5)

我知道这篇文章已有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来实现它。