【问题标题】:Set a trigger's property to a child将触发器的属性设置为子级
【发布时间】:2012-11-23 04:13:42
【问题描述】:

如何将触发器设置为依赖于子属性? 就像我想根据 Expander 的 ListView 是否更改我的 Expander 的 header 有没有孩子。

但我总是收到 Comilor 错误,即 HasItems 无法解析...

<Expander Header="Expand to add new ports">
  <Expander.Resources>
    <Style TargetType="{x:Type Expander}">
      <Style.Triggers>
         <Trigger Property="Content.HasItems" Value="False">
           <Setter Property="Header" Value="No children" />
         </Trigger>
      </Style.Triggers>
    </Style>
  </Expander.Resources>
  <ListView ItemsSource="{Binding Path=SomeItems}">
</ListView>

【问题讨论】:

    标签: wpf xaml triggers styles


    【解决方案1】:

    您可以使用DataTrigger 绑定到ListView 使用ElementName:

    <Expander>
        <Expander.Resources>
            <Style TargetType="{x:Type Expander}">
                <Setter Property="Header" Value="Expand to add new ports" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=ListView, Path=HasItems}" Value="False">
                        <Setter Property="Header" Value="No children" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Expander.Resources>
        <ListView x:Name="ListView" ItemsSource="{Binding Path=SomeItems}">
        </ListView>
    </Expander>
    

    还请注意,如果您在声明控件的同时设置属性,则触发器中的Setter 不会有任何效果。

    使用这个:

    <Setter Property="Header" Value="Expand to add new ports" />
    

    而不是这个:

    <Expander Header="Expand to add new ports">
    

    【讨论】:

      【解决方案2】:

      您的代码中有多个问题 -

      首先,您应该set the property in style setter 而不是在本地声明它。

      其次,使用DataTrigger 代替触发器。

      <Expander>
        <Expander.Style>
          <Style TargetType="{x:Type Expander}">
            <Setter Property="Header" Value="Expand to add new ports"/>
            <Style.Triggers>
               <DataTrigger Binding="{Binding Path=SomeItems.Count}" Value="0">
                   <Setter Property="Header" Value="No children" />
               </DataTrigger>
            </Style.Triggers>
          </Style>
        </Expander.Style>
        <ListView ItemsSource="{Binding Path=SomeItems}">
        </ListView>
      </Expander>
      

      【讨论】:

        猜你喜欢
        • 2011-03-10
        • 2021-06-28
        • 2013-04-09
        • 1970-01-01
        • 2023-03-29
        • 2013-08-30
        • 1970-01-01
        • 2021-12-11
        • 2011-10-30
        相关资源
        最近更新 更多