39

私はWPFを学んでいますが、次の問題が発生しました:

XAML とは別の名前空間に列挙型があります。

 public enum NodeType
 {
    Type_SYSTEM = 1,              // System
    Type_DB     = 2,              // Database
    Type_ROOT   = 512,            // Root folder
    Type_FOLDER = 1024,           // Folder
 }

私の XAML で、整数で画像をトリガーしたい

<Image.Style>
    <Style TargetType="{x:Type Image}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Type}" Value="{NodeType: }">
                <Setter Property="Source" Value="/Images/DB.PNG"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Type}" Value="128">
                <Setter Property="Source" Value="/Images/SERVER.PNG"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Image.Style>

整数値を取得し、XAML コードで直接列挙型と比較する方法はありますか?

私の列挙型は名前空間にありますAnotherNamespace.Types

<DataTrigger Binding="{Binding IntegerType}" Value="MyEnumType.Type_DB">
    <Setter Property="Source" Value="/Images/SERVER.PNG"/> 
</DataTrigger>
4

3 に答える 3

65

ここで同様の質問がありました。私の最終結果は、一致させたい値を として渡す汎用IValueConverterを作成することでした。バインドされた値が Enumの値と一致するかどうかに応じて、またはを返します。enumConverterParametertruefalse(int)

最終結果は次のようになります。

XAML コード:

<DataTrigger Value="True"
             Binding="{Binding SomeIntValue, 
                 Converter={StaticResource IsIntEqualEnumConverter},
                 ConverterParameter={x:Static local:NodeType.Type_DB}}">

コンバータ

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    if (parameter == null || value == null) return false;

    if (parameter.GetType().IsEnum && value is int)
    {
        return (int)parameter == (int)value;
    } 
    return false;
}
于 2013-01-11T13:57:49.753 に答える