我在我想从包含在商业库(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");
}
我想你可能能够使用https://stackoverflow.com/questions/5411962/wpf-styling-a-generic-base-control。但是,对我来说这似乎很麻烦。为什么不使用'GetTemplateChild()',检查一个'null'结果,并且如果它为空,则跳过该方法的其余部分?如果零件在您自己的模板中丢失,这将非常明显。如果你真的担心它,你可以随时在其他地方验证你的自定义模板。 –