我如何在XAML中使用枚举类型? [英] How can i use enum types in XAML?

查看:154
本文介绍了我如何在XAML中使用枚举类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习WPF,我遇到这个问题:



示例:
我在XAML的另一个命名空间中有一个枚举类型:

  public enum NodeType 
{
Type_SYSTEM = 1,// System
Type_DB = 2,//数据库
Type_ROOT = 512,//根文件夹
Type_FOLDER = 1024,//文件夹
}

在我的XAML我想触发一个整数的图像

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

我可以得到一个整数值,并直接在XAML代码中与枚举类型进行比较吗?



我的枚举在命名空间AnotherNamespace.Types中

 < DataTrigger绑定={Binding IntegerType}Value =MyEnumType.Type_DB> 
< Setter Property =SourceValue =/ Images / SERVER.PNG/>

解决方案

我有类似的问题此处,最终的结果是创建一个通用的 IValueConverter ,通过枚举 value我想与 ConverterParameter 匹配,并返回 true false 取决于绑定值是否符合枚举的(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;
}
返回false;
}


I'm learning WPF and i encountered this problem:

Example: I've an enum type in another namespace of XAML :

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

in my XAML i want to triggering an image with an integer

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

Can i get an integer value and compare it with an enum type directly in XAML code?

My enum is in namespace "AnotherNamespace.Types"

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

解决方案

I had a similar question here, and my end result was to create a generic IValueConverter that passed the enum value I wanted to match in as the ConverterParameter, and it returns true or false depending on if the bound value matches the (int) value of the Enum.

The end result looks like this:

XAML Code:

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

Converter

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

这篇关于我如何在XAML中使用枚举类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆