2

条件に基づいて ListBoxItem フォアグラウンド ベースを変更するには、DataTemplate.Triggers を介して行うことができます。

<ListBox.ItemTemplate>
<DataTemplate>
    ...
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Name}" Value="Item1">
            <Setter Property="ListBoxItem.Foreground" Value="Blue" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>

または、Style.Triggers 内で実行できます。

<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Name}" Value="Item1">
            <Setter Property="Background" Value="Blue" />
        </DataTrigger>
    </Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>

質問:

これら2つのアプローチの違いは何ですか?

重ねて使うシーンはありますか?

それぞれは何に最適ですか?

両方を適用すると、どちらのトリガーが最初に発生しますか?

4

1 に答える 1

5

この例では、スタイル トリガーはすべてのリスト ボックス項目に適用されますが、データ テンプレート トリガーはデータ テンプレートを使用してリスト ボックス項目に適用されます。

WPF の良いところは、1 つの目標を達成する方法が複数あることです。あなたが持っているほとんどの質問について、答えを得るためにトリガーをいじる必要があります。

一般に、スタイルトリガーはスタイルを変更するために使用され、「一般的に」データと対話しません(ただし、スタックオーバーフローで両方の方法で使用されるコードを見てきました)。私があなただったら、背景を変更しているので、キー付きのスタイルを使用します。

于 2013-02-22T16:28:02.800 に答える