可以在网格的行定义上使用触发器吗?

18

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

<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个回答

26

我认为你的Xaml代码唯一的问题是你在RowDefinition上显式设置了高度,从而覆盖了数据触发器(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
是的。一旦我删除了高度的显式设置,问题就解决了。干得好! - GWLlosa
为什么我需要指定RowDefinition.Height,而仅使用Height属性为什么不起作用?我不理解 - MrScf

9

我知道这篇帖子已经三年了,但它仍然可能对某些人有所帮助。

<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,我成功解决了这个问题。


RowDefinition.Height 可以简写为 Height。 - user1021364

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接