c# - 如何在 XAML 中使用枚举类型?

标签 c# wpf xaml triggers enums

我正在学习 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>

最佳答案

我有一个类似的问题here ,我的最终结果是创建一个通用的 IValueConverter传递了我想要匹配的 enum 值作为 ConverterParameter,它返回 truefalse,具体取决于如果绑定(bind)值与枚举的 (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;
}

关于c# - 如何在 XAML 中使用枚举类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14279602/

相关文章:

c# - 在更新模型后更新 View

c# - 为什么 orderBy 不适用于此 linq 表达式?

c# - 在 XAML 中更改具有透明度的 PNG 的显示颜色

.net - 您可以将列表框中的选定项绑定(bind)到 WPF 中的单独对象吗?

C# XAML MVVM Treeview 控件数据绑定(bind)

c# - 在 Xamarin 中停止 WebView

c# - 限制数据查询,只获取最后 1000 行

c# - 服务总线根据内容过滤消息

c# - 在引发不同事件时引发事件 - C#

xaml - 如何在 Xamarin.Forms UWP 中放置背景图像?