【问题标题】:Is it possible to use Triggers on Grid RowDefinitions?是否可以在 Grid RowDefinitions 上使用触发器?
【发布时间】:2011-07-03 14:07:25
【问题描述】:

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

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

这编译,没有抛出错误,但似乎没有任何效果。是否有我遗漏的东西,或者网格在绘制表单后不允许其行调整大小或类似的东西?

【问题讨论】:

    标签: .net wpf xaml grid datatrigger


    【解决方案1】:

    我认为您的 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>
    

    【讨论】:

    • 是的。一旦我删除了高度的显式设置,问题就消失了。好收获!
    • 为什么我应该指出 RowDefinition.Height 以及为什么不能只使用 Height 作为属性?没看懂
    【解决方案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 来让它工作。

    【讨论】:

    • RowDefinition.Height 可以减少到 Height
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2011-07-03
    • 2012-01-15
    相关资源
    最近更新 更多