我将Enum定义为Type
public Enum **Type**
{
OneType,
TwoType,
ThreeType
};
现在,我将键入绑定到功能区控件中的下拉功能区控件下拉菜单,该控件显示带有相应图像的MenuName的每个菜单。
(我正在使用Syncfusion Ribbon Control)。
我希望每个枚举类型(OneType)都定义了具有菜单名称和腐蚀图像的数据模板。
如何定义枚举的数据模板?
如果有可能,请建议我解决方案!!
请告诉我,如果不可能,或者我在想错误的方向!!
答案 0 :(得分:13)
一种方法是创建DataTemplateSelector
,并将其分配给菜单的ItemTemplateSelector
属性。在DataTemplateSelector
的代码中,您只需根据枚举值返回DataTemplate
答案 1 :(得分:12)
不确定这是否适用于您的特定情况,但它与针对枚举的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>
</DataTemplate.Triggers>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Static MyEnumType.ValueTwo}">
<Setter TargetName="valueText" Property="Text" Value="Second Value" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
答案 2 :(得分:2)
人们常常在使用多态时使用枚举。你应该至少检查一下这是否是其中一种情况。在类的代码中存在switch
块来检查实例的枚举值,这通常表明这是一个好主意。如果你可以通过定义子类来消除枚举,那么你就不必乱用数据模板选择器和值转换器。