web-dev-qa-db-ja.com

コントロールのTriggersコレクションにDataTriggerを追加できないのはなぜですか?

なぜ私はこのようにコーディングできないのですか

<Border Width="130" Height="70">
    <Border.Triggers>
        <DataTrigger Binding="{Binding Path=CurrentStatus}" Value="0">
            <Setter Property="Style" Value="{StaticResource ResourceKey=ListBoxItemBorder}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=CurrentStatus}" Value="200">
            <Setter Property="Style" Value="{StaticResource ResourceKey=ListBoxItemBorderInactive}"/>
        </DataTrigger>
    </Border.Triggers>
</Border>

このエラーが発生します

Failed object initialization (ISupportInitialize.EndInit). 
Triggers collection members must be of type EventTrigger.  
Error at object '4_T' in markup file

私は間違ったplzヘルプを何をしていますか。

15
Tan

安倍は正しく、制限をよく説明しています。検討したいことが1つあります。

2つの境界線スタイルを持ち、トリガーに基づいてそれらの間で選択しようとする代わりに...

境界線に単一のスタイルを使用します。このスタイルのセッターは、「通常の」外観を表します。このスタイルにはDataTriggerも含まれており、DataTriggerには、基本的に2番目のスタイルを表すセッターのコレクションがあります(このトリガーがtrueと評価された場合、標準のセッターよりも優先度が高くなります。

編集:

このようなもの -

<Style TargetType="Border" x:Key="BorderStyle">
    <!-- These setters are the same as your normal style when none of your triggers are true -->
    <Setter Property="BorderBrush" Value="Black" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=CurrentStatus}" Value="0">
            <!-- These setters are the same as your ListBoxItemBorder style -->
            <Setter Property="BorderBrush" Value="Green" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=CurrentStatus}" Value="200">
            <!-- These setters are the same as your ListBoxItemBorderInactive style -->
            <Setter Property="BorderBrush" Value="Gray" />
        </DataTrigger>
    </Style.Triggers>
</Style>
31
Scott

残念ながら、要素に直接適用できるのはEventTriggersだけです。 TriggerまたはDataTriggerを使用する場合は、StyleControlTemplate、またはDataTemplateに含める必要があります。

リソース名から、これはBorderListBoxItem内のControlTemplateのように見えます。トリガーをテンプレートのトリガーコレクションに簡単に移動できます。

18
Abe Heidebrecht

これが制限トリガーなしの方法です。

例:

 <Border Width="130" Height="100" Grid.Row="1">
        <ListBox x:Name="lstItems" ItemsSource="{Binding TestItems}">

        </ListBox>
        <tg:TriggerExtensions.Triggers>
            <tg:TriggerCollections>
                <tg:DataTriggerInfo Binding="{Binding CurrentStatus}" Value="0">
                    <tg:DataTriggerInfo.Setters>
                        <tg:SetterInfo ElementName="lstItems" Property="Style" Value="{StaticResource ListBoxRed}"/>
                    </tg:DataTriggerInfo.Setters>
                </tg:DataTriggerInfo>
                <tg:DataTriggerInfo Binding="{Binding CurrentStatus}" Value="0" IsInvert="True">
                    <tg:DataTriggerInfo.Setters>
                        <tg:SetterInfo ElementName="lstItems" Property="Style" Value="{StaticResource ListBoxBlue}"/>
                    </tg:DataTriggerInfo.Setters>
                </tg:DataTriggerInfo>
            </tg:TriggerCollections>
        </tg:TriggerExtensions.Triggers>
    </Border>

リンク サンプル

リンクコンポーネント Github

0
Ali Yousefi