【问题标题】:Finding WPF Control Template Parts and States查找 WPF 控件模板部分和状态
【发布时间】:2020-08-04 18:25:13
【问题描述】:

MSDN documentation 指定在定义自定义控件时,应定义控件协定。从那个页面,它是这样定义的:

[TemplatePart(Name = "UpButtonElement", Type = typeof(RepeatButton))]
[TemplatePart(Name = "DownButtonElement", Type = typeof(RepeatButton))]
[TemplateVisualState(Name = "Positive", GroupName = "ValueStates")]
//...rest cut for length
public class NumericUpDown : Control
//...

我在文档中找不到指定如何发现此合同的任何地方。如果我重写了控件模板,我怎么知道我已经处理了所有的 VisualStates,并且我已经实现了所有的 Parts?

This answer 链接到相同的文档,并提供了一种通过反射进行此操作的方法,但这在设计时没有帮助。我真的仅限于编写一个转储反射属性的控制台应用程序,还是咨询documentation(可能不适用于第 3 方控件)?

【问题讨论】:

  • 查阅文档或控件的元数据是要走的路。您应该考虑是否真的想使用没有像样文档的第三方库。

标签: wpf custom-controls controltemplate


【解决方案1】:

我真的仅限于编写一个转储反射属性的控制台应用程序,或者查阅文档 [...] 吗?

是的。

您要么参考官方文档,要么必须使用反射找到相应的属性,或者通过查看 C# 代码和 XAML 资源来找到模板部分、视觉状态和属性。更糟糕的是,虽然应该定义契约,但并非所有控件都这样做,在这种情况下反射甚至没有帮助。

然而,像 DevExpressTelerik 这样的大多数商业库都为样式和模板提供了很好的文档。对于 WPF 控件,如果文档没有提供足够的信息,您可以通过 Blend 或 Visual Studio 提取样式和控件模板,并在最坏的情况下查阅参考源。如果没有特定库的文档和参考源,则为猜测或反编译。

【讨论】:

  • 我对“duh”所暗示的明显性提出异议。大多数其他语言结构,尤其是在涉及合同的情况下,都可以通过智能感知发现,以某种方式。我并不感到惊讶。
  • @Travis 抱歉,“(duh)”应该表示显而易见,但不幸的是,这仍然是一个没有方便解决方案的问题。我完全同意你的看法,人们希望这必须以任何方式得到支持,但你已经研究了相关来源,所以感谢你,我不能补充太多。
猜你喜欢
  • 1970-01-01
  • 2011-02-21
  • 2011-05-18
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
  • 2020-05-12
相关资源
最近更新 更多