【问题标题】:Set value of DependencyProperty directly [duplicate]直接设置DependencyProperty的值[重复]
【发布时间】:2017-05-17 14:49:58
【问题描述】:

好的,所以我有一个源自 Panel 的测试控件。我向它添加了新的依赖属性。

public class TestPanel : Panel
{
    public static DependencyProperty TestProperty = DependencyProperty.Register(
        "Test",
        typeof(double),
        typeof(TestPanel),
        new FrameworkPropertyMetadata(
            0.0,
            null));

    public double Test
    {
        get
        {
            return (double)this.GetValue(TestProperty);

        }
        set
        {
            this.SetValue(TestProperty, value);
        }
    }
}

然后我在 xaml 中定义了它<controls:TestPanel Test="50" />

但现在我想知道,为什么不调用 Test 的设置器?它不应该传递值(50)吗?在排列过程中我得到默认值(0.0)。

还是仅使用绑定才有效?

【问题讨论】:

  • WPF 直接调用 SetValue。所以你的setter不会被执行。但是控件初始化后的测试值应该是 50。你在任何地方都读过这个值吗?
  • 是的,我的依赖属性不匹配,重复也指向我的扩展信息,谢谢

标签: c# wpf dependency-properties


【解决方案1】:

XAML 处理器使用SetValue 方法设置依赖属性的值:

Setters not run on Dependency Properties?

如果你想在属性被设置为新值时做某事,你应该注册一个回调:

public static DependencyProperty TestProperty = DependencyProperty.Register(
"Test",
typeof(double),
typeof(TestPanel),
new FrameworkPropertyMetadata(
   0.0,
   OnPropertyChanged));

private static object OnPropertyChanged(DependencyObject d, object baseValue)
{
    //...
}

【讨论】:

  • 谁反对这个?这准确地描述了什么是错误的以及如何调解它
  • 不是我的反对意见,但有很多重复,真的需要答案吗?例如。 here 是另一个。
猜你喜欢
  • 2014-09-27
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多