我在应用程序中遇到问题,我希望从商业库(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");
}
答案 0 :(得分:0)
有没有办法避免这种情况并且永远不会应用基类模板
如果您只想调用派生类&#39; docker run -v /Users/name/Documents/my-project:/root/my-project -p 9000:9000 -p 8000:8000 -t -i bamos/openface /bin/bash
方法,你应该避免调用基类&#39;重写方法中的方法:
OnApplyTemplate()
如果您想从头开始提供自己的默认自定义public override void OnApplyTemplate()
{
//DON't CALL THIS ONE: base.OnApplyTemplate();
AnnotationRoot = GetAndAssertTemplateChild<Grid>("PART_LineAnnotationRoot");
_line = GetAndAssertTemplateChild<Line>("PART_Line");
_ghostLine = GetAndAssertTemplateChild<Line>("PART_GhostLine");
_label = GetAndAssertTemplateChild<TextBlock>("PART_Label");
}
,则应在控件类中定义静态构造函数:
ControlTemplate
...并在名为&#34; generic.xaml&#34;的static YourControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(YourControl),
new FrameworkPropertyMetadata(typeof(YourControl)));
}
中定义默认模板。位于名为&#34; Themes&#34;的文件夹中。在定义控件类的项目的根文件夹中。