在 WPF 中,如何在枚举的情况下定义数据模板?

发布于 2024-08-25 05:46:36 字数 366 浏览 5 评论 0 原文

我有一个定义为类型的枚举,

public Enum **Type**
{
   OneType,
   TwoType,
   ThreeType
};

现在我将类型绑定到功能区控件中的下拉功能区控件下拉菜单,该菜单显示每个菜单以及带有相应图像的菜单名称。

(我正在使用 Syncfusion Ribbon Control)。

我希望每个枚举类型(例如 OneType )都定义了数据模板,其中包含菜单名称和腐蚀图像。

如何定义 enum 的数据模板?

如果可能的话,请向我建议解决方案!

如果不可能或者我的想法是错误的,也请告诉我!

I have a Enum defined as Type

public Enum **Type**
{
   OneType,
   TwoType,
   ThreeType
};

Now I bind Type to a drop down Ribbon Control Drop Down Menu in a Ribbon Control that displays each menu with a MenuName with corresponding Image.

( I am using Syncfusion Ribbon Control ).

I want that each enum type like ( OneType ) has data template defined that has Name of the menu and corrospending image.

How can I define the data template of enum ?

Please suggest me the solution, if this is possible !!

Please also tell me if its not possible or I am thinking in the wrong direction !!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

嗫嚅 2024-09-01 05:46:36

不确定这是否是适合您的特定情况的解决方案,但它与枚举的 DataTemplate 问题相关。可以为枚举类型创建一个 DataTemplate,并使用 DataTriggers 调整该模板中的控件以获取单个枚举值:

枚举:

enum MyEnumType 
{
    ValueOne,
    ValueTwo,
}

模板:

<DataTemplate DataType="{x:Type MyEnumType}">
    <TextBlock x:Name="valueText"/>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding}" Value="{x:Static MyEnumType.ValueOne}">
            <Setter TargetName="valueText" Property="Text" Value="First Value" />
        </DataTrigger>
        <DataTrigger Binding="{Binding}" Value="{x:Static MyEnumType.ValueTwo}">
            <Setter TargetName="valueText" Property="Text" Value="Second Value" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

Not sure whether this is an applicable solution to your particular situation, but it is relevant to the question of DataTemplate for enum. It is possible to create one DataTemplate for the enum type and use DataTriggers to tweak the controls in that template for individual enum value:

Enum:

enum MyEnumType 
{
    ValueOne,
    ValueTwo,
}

Template:

<DataTemplate DataType="{x:Type MyEnumType}">
    <TextBlock x:Name="valueText"/>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding}" Value="{x:Static MyEnumType.ValueOne}">
            <Setter TargetName="valueText" Property="Text" Value="First Value" />
        </DataTrigger>
        <DataTrigger Binding="{Binding}" Value="{x:Static MyEnumType.ValueTwo}">
            <Setter TargetName="valueText" Property="Text" Value="Second Value" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>
三寸金莲 2024-09-01 05:46:36

一种方法是创建一个 DataTemplateSelector,并将其分配给 ItemTemplateSelector 属性。在DataTemplateSelector的代码中,您只需要根据枚举值返回一个DataTemplate

One way to do it would be to create a DataTemplateSelector, and assign it to the ItemTemplateSelector property of the menu. In the code of the DataTemplateSelector, you just need to return a DataTemplate based on the enum value

疧_╮線 2024-09-01 05:46:36

人们经常在应该使用多态性的时候使用枚举。您至少应该检查一下这是否是其中一种情况。类代码中存在检查实例枚举值的 switch 块通常表明这是一个好主意。如果您可以通过定义子类来消除枚举,那么您就不必使用数据模板选择器和值转换器之类的东西。

It's very often the case that people use enums when they should be using polymorphism. You should, at the least, check to see if this is one of those cases. The presence of switch blocks in your class's code that check the value of the instance's enum is often a sign that this is a good idea. If you can eliminate the enum by defining subclasses, then you don't have to mess around with the likes of data template selectors and value converters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文