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

发布于 2024-10-31 11:46:07 字数 535 浏览 0 评论 0原文

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

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 枚举字段约束的单独样式? IE 对于 ObjType 设置为 Type1 和 Type2 的 MyObject 有单独的样式吗?

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

谢谢

I have a collection of objects like so:

public enum ObjectType
{
   Type1,
   Type2
}

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

One of the styles I have from an example app is:

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

How can I create separate styles constrained on the ObjectType enum field? I.E. have a separate style for a MyObject with an ObjType set to Type1 vs Type2?

My fields do implement INotifyPropertyChanged, this is just some brief sample code

Thanks

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

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

发布评论

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

评论(2

月光色 2024-11-07 11:46:07

我可能会通过触发器来做到这一点:

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

I'd probably do this via triggers:

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

Separation is probably not possible.

Well, you can create separate styles but you would need to apply them manually using the 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>
晚风撩人 2024-11-07 11:46:07

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

Try binding style property to the enum property,
using a value converter.

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