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

本文关键字:字段 枚举 Xaml 样式 于对象 对象 | 更新日期: 2023-09-27 17:49:38

我有一个像这样的对象集合:

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 enum字段?即有一个单独的风格与ObjType设置为Type1 vs Type2的MyObject ?

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

谢谢

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

我可能会通过触发器:

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

尝试将style属性绑定到enum属性,使用值转换器