c# - 从 C# 代码生成包含触发器的 WPF 样式

标签 c# wpf xaml styles

我在从 C# 代码生成包含触发器的 WPF 样式时遇到了一些问题。 这是我想通过 C# 生成的 WPF 代码。

<Style.Triggers>
    <Trigger Property="IsMouseOver" Value="true">
        <Setter Property="BitmapEffect">
            <Setter.Value>
                <OuterGlowBitmapEffect GlowColor="Gold" GlowSize="10" />
            </Setter.Value>
        </Setter>
    </Trigger>
</Style.Triggers>

我已经尝试过这样生成:

Style style = new Style();
Trigger trigger = new Trigger();
Setter setter = new Setter();

style.Triggers.Add(trigger);
trigger.Property = (DependencyProperty.Register("IsMouseOver", Type.GetType("IsMouseOver"), Type.GetType("Canvas"))); //Line not tested
//trigger.Setters.Add(new Setter(new BitmapEffect()); //Line not working

但我不知道如何将 trigger.Setters 与 BitmapEffect 一起使用

提前致谢!

最佳答案

直接翻译为:

OuterGlowBitmapEffect effect = new OuterGlowBitmapEffect();
effect.GlowColor = Colors.Gold;
effect.GlowSize = 10;

Setter setter = new Setter();
setter.Property = UIElement.BitmapEffectProperty;
setter.Value = effect;

Trigger trigger = new Trigger();
trigger.Property = UIElement.IsMouseOverProperty;
trigger.Value = true;
trigger.Setters.Add(setter);

Style style = new Style();
style.Triggers.Add(trigger);

这可以清理到:

var effect = new OuterGlowBitmapEffect() {
    GlowColor = Colors.Gold,
    GlowSize = 10,
};

var setter = new Setter() {
    Property = UIElement.BitmapEffectProperty,
    Value = effect,
};

var trigger = new Trigger() {
    Property = UIElement.IsMouseOverProperty,
    Value = true,
    Setters = { setter },
};

var style = new Style() {
    Triggers = { trigger },
};

但这是基于您的编码风格。

关于c# - 从 C# 代码生成包含触发器的 WPF 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6269123/

相关文章:

c# - 将 JSON 对象传递给 WebApi

c# - 带有枚举的无效初始值设定项成员类

c# - Kinect 1.8 colorframe 和 depthframe 不协调

WPF ErrorTemplate 未聚焦时可见?

c# - MVVM - 调用控制方法

wpf - AdornedElementPlaceholder 当我们在验证控件模板中使用它时,它到底做了什么?

c# - 在 wpf 中找不到 "Resources"文件

c# - 为什么我们需要 dnx 或 web 跨平台

c# - 使用属性路由时查询字符串不起作用

c# - 通过触发器更改文本 block 中文本的颜色