【问题标题】:WPF: How can I find the source of an inherited property valueWPF:如何找到继承的属性值的来源
【发布时间】:2013-07-17 07:59:40
【问题描述】:

我一直在处理一个 WPF 项目,该项目有一个我似乎无法理解的缺口:有几个控件包括其他控件,并且由资源字典中的样式定义设置样式。内部控件之一是标签。该 Label 的继承 Padding 为 5。

标签没有定义样式,更不用说任何填充了。并且表明它是继承的,但我找不到那个 Padding 来自哪里。所以,我的问题是:如何确定这个值是从哪里继承的?

【问题讨论】:

  • 你需要知道从什么Style(例如-key)元素继承的值?
  • 是的,任何可以让我知道 Padding 来自哪里的东西。我已经通过ValueSource vals = DependencyPropertyHelper.GetValueSource(this.ButtonCloseAllDocuments, PaddingProperty); 发现 BaseValueSource 是 Style。但我有不止一种风格... ;-)
  • 我想为您提供相同的解决方案 8)。如果您可以编辑样式?

标签: wpf inheritance padding


【解决方案1】:

正如米歇尔 M 所说 DependencyPropertyHelper.GetValueSource 是要走的路。

值的来源有不同的评估顺序:

最重要的是在上面

  1. 属性系统的强制值 (CoerceValueCallback)
  2. 动画
  3. 本地设定值
  4. 样式触发器
  5. 模板触发器
  6. 样式设置器
  7. 主题风格触发器
  8. 主题样式设置器
  9. 继承
  10. 默认值

最后 ValidateValueCallback 接受或丢弃设置的值

这可能有帮助

【讨论】:

  • 嗨塞缪尔,感谢您的回复。我知道这是评估的顺序,或多或少。但是,我想知道的是是否有一个函数(可能是 GetValueSource)来确定该值在此堆栈中的确切位置。最好是哪个动画、触发器、样式、主题样式等。
  • 那么 GetValueSource 返回一个 ValueSource,它有一个属性 BaseValueSource msdn.microsoft.com/de-de/library/… 会告诉你它来自哪里。这是您最接近该位置的位置,而无需执行自己的处理来迭代所有可能的源以查找您需要的 DependencyProperty。
猜你喜欢
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 2010-11-26
相关资源
最近更新 更多