【发布时间】:2017-06-04 02:49:04
【问题描述】:
我在应用程序中遇到问题,我想从商业库 (scichart) 中包含的控件派生我自己的自定义控件。
我正在重写 OnApplyTemplate,如下面的代码所示,但在调用 GetAndAssertTemplateChild 时遇到了一个问题(库中的一个函数与 GetTemplateChild 几乎相同,但如果结果为等于null)在模板中找不到该部分。
在调查此问题时,我发现 OnApplyTemplate 被多次调用,它首先使用继承自的控件模板调用,然后使用新控件的模板调用。有什么办法可以避免这种情况并且永远不要应用基类模板。
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
AnnotationRoot = GetAndAssertTemplateChild<Grid>("PART_LineAnnotationRoot");
_line = GetAndAssertTemplateChild<Line>("PART_Line");
_ghostLine = GetAndAssertTemplateChild<Line>("PART_GhostLine");
_label = GetAndAssertTemplateChild<TextBlock>("PART_Label");
}
【问题讨论】:
-
我想你也许可以使用stackoverflow.com/questions/5411962/…。但是,这对我来说似乎很麻烦。为什么不直接使用
GetTemplateChild(),检查null结果,如果是null,则跳过该方法的其余部分?如果您自己的模板中缺少该部分,那将是非常明显的。如果您真的很担心,您可以随时在其他地方验证您的自定义模板。
标签: c# wpf inheritance styles