基于对象中枚举字段的xaml样式

时间:2011-04-07 20:17:19

标签: c# wpf xaml enums styles

我有一组像这样的对象:

public enum ObjectType
{
   Type1,
   Type2
}

public class MyObject
{
   ...
   public ObjectType ObjType;
   public string Header;
   ...
}

我从示例应用程序获得的一种样式是:

    <Style TargetType="{x:Type inf:MyObject}">
        <Setter Property="Header" Value="{Binding Header}" />
    </Style>

如何在ObjectType枚举字段中创建约束的单独样式? I.E.有一个单独的MyObject样式,ObjType设置为Type1 vs Type2?

我的字段确实实现了INotifyPropertyChanged,这只是一些简短的示例代码

由于

2 个答案:

答案 0 :(得分:5)

我可能会通过触发器执行此操作:

<Style TargetType="{x:Type inf:MyObject}">
    <Setter Property="Header" Value="{Binding Header}" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding ObjType}" Value="Type1">
            <!-- A bunch of setters -->
        </DataTrigger>
        <DataTrigger Binding="{Binding ObjType}" Value="Type2">
            <!-- Another bunch of setters -->
        </DataTrigger>
    </Style.Triggers>
</Style>

分离可能是不可能的。

好吧,您可以创建单独的样式,但需要使用ResourceKey手动应用它们:

<Style x:Key="Type1Style" TargetType="{x:Type inf:MyObject}"
                          BasedOn="{StaticResource {x:Type inf:MyObject}}">
    <!-- Setters for type1 -->
</Style>
<Style x:Key="Type2Style" TargetType="{x:Type inf:MyObject}"
                          BasedOn="{StaticResource {x:Type inf:MyObject}}">
    <!-- Setters for type2 -->
</Style>

答案 1 :(得分:1)

尝试将样式属性绑定到枚举属性, 使用值转换器。