2

トリガーが子のプロパティに依存するように設定するにはどうすればよいですか? ExpanderListViewに子があるかどうかに応じて、Expanderのヘッダーを変更したいのと同じです 。

しかし、HasItems を解決できないという Comilor エラーが常に発生します...

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

4

2 に答える 2

4

usingDataTriggerにバインドを使用できます。ListViewElementName

<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">
于 2012-12-05T11:53:50.630 に答える
0

コードに複数の問題があります -

まず、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>
于 2012-12-05T11:54:36.560 に答える