【问题标题】:Cannot change own property in style不能改变自己的财产风格
【发布时间】:2010-07-02 10:08:20
【问题描述】:

我正在我的自定义控件类 DataPoint 中创建依赖属性:

public abstract class DataPoint : Control
{
        public Color BaseColor
        {
            get { return (Color)GetValue(BaseColorProperty); }
            set { SetValue(BaseColorProperty, value); }
        }

        public static readonly DependencyProperty BaseColorProperty =
            DependencyProperty.Register("BaseColor", typeof(Color), typeof(DataPoint), new UIPropertyMetadata(Colors.DarkRed));

    // Other class stuff
}

然后我创建其他自定义控件AreaDataPoint继承DataPoint:

public class AreaDataPoint : DataPoint
{
        static AreaDataPoint()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(AreaDataPoint), new FrameworkPropertyMetadata(typeof(AreaDataPoint)));
        }

    // Other class stuff
}

在 xaml 中,我试图为 BaseColor 属性赋值,但它不起作用

<Style TargetType="{x:Type local1:AreaDataPoint}">
    <Setter Property="BaseColor" Value="DarkGreen" />
</Style>

【问题讨论】:

  • “它不起作用”是什么意思。您能告诉我们错误消息、异常或错误结果等吗?

标签: c# wpf styles dependency-properties


【解决方案1】:

您设置的是“Background”属性,而不是“BaseColor”属性?

<Style TargetType="{x:Type local1:AreaDataPoint}">
    <Setter Property="BaseColor" Value="DarkGreen" />
</Style>

请记住,您可能需要一个转换器来获取字符串 DarkGreen 并将其转换为 Color 实例。

【讨论】:

  • 我在 xaml 中错了。属性名称是 BaseColor。但它也不起作用。
  • 正如我所说,您可能需要一个转换器来获取“DarkGreen”的值并将其转换为颜色。测试它的一种方法是将 DependencyProperty 的类型更改为字符串,然后查看是否调用了 setter。
  • XAML 中的命名颜色和 SolidColorBrushes 会自动转换。
【解决方案2】:

您如何确定它“不起作用”。从您的代码中的内容来看,一切都是正确的,因此您可能正在其他地方做一些导致 Style 值丢失的事情。您是否可能在代码或 XAML 中的某处为 BaseColor 设置本地值?您是否验证过您使用 BaseColor 属性的位置实际上是在正确提取值?直接使用颜色也不常见 - 大多数情况(前景、背景、形状填充)都使用画笔,所以我也会检查一下。

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 2013-04-27
    • 1970-01-01
    相关资源
    最近更新 更多