C#WFP在具有override DefaultStyleKeyProperty的控件的控件模板中查找控件
我下载了一个示例解决方案,它使用从usercontrol继承但没有.xaml设计文件的控件的DefaultStyleKeyProperty的OverrideMetadata方法,并且它将成为具有类似或几乎相同布局的其他子控件的基控件。 代码可以在这里找到 现在,我试图从基类访问位于其覆盖样式的内容模板中的按钮,名称为“btnTest1”,但我找不到实现此操作的方法 我想知道是否有办法在基类构造函数或子类构造函数(可能在调用InitializeComponent之后)中找到控件,因为我需要在以后的代码中访问它 提前谢谢C#WFP在具有override DefaultStyleKeyProperty的控件的控件模板中查找控件,c#,wpf,inheritance,metadata,contenttemplate,C#,Wpf,Inheritance,Metadata,Contenttemplate,我下载了一个示例解决方案,它使用从usercontrol继承但没有.xaml设计文件的控件的DefaultStyleKeyProperty的OverrideMetadata方法,并且它将成为具有类似或几乎相同布局的其他子控件的基控件。 代码可以在这里找到 现在,我试图从基类访问位于其覆盖样式的内容模板中的按钮,名称为“btnTest1”,但我找不到实现此操作的方法 我想知道是否有办法在基类构造函数或子类构造函数(可能在调用InitializeComponent之后)中找到控件,因为我需要在以后的
David.这有一种风格模式 在control.cs文件中,要覆盖应用程序模板上的
protected override void OnApplyTemplate(){
Button yourButtonControl = GetTemplateChild("TheNameOfYourButton") as Button;
base.OnApplyTemplate();
}
如果您想遵循Microsoft模式,那么首先您需要将控件命名为“PART\u SomethingButton
”。这只是意味着它是一个模板部件
然后在Control.cs
类中,在控件上添加一个属性
- 这告诉任何重写默认样式的人,如果他们希望代码正常工作,他们需要在模板上有一个名为PART\u something Button的
按钮
在类中,添加一个私有按钮控件。
- 我们将使用此按钮访问整个控件中的按钮
最后在OnApplyTemplate中设置私有按钮。
- 这将进入模板,并将按钮缓存在cs文件中,以便我们可以对其进行操作或从中捕获事件
非常感谢你。我通过附加到加载的事件找到了一个解决方案,但我认为覆盖OnApplyTemplate方法是更好的解决方案。@YakumoFujii我发布的方式是专业的方式
[TemplatePart(Name = "PART_SomethingButton", Type = typeof(Button))]
public class MyControl : Control
[TemplatePart(Name = "PART_SomethingButton", Type = typeof(Button))]
public class MyControl : Control{
private Button _partSomethingButton;
}
[TemplatePart(Name = "PART_SomethingButton", Type = typeof(Button))]
public class MyControl : Control{
private Button _partSomethingButton;
protected override void OnApplyTemplate(){
_partSomethingButton = GetTemplateChild("PART_SomethingButton") as Button;
base.OnApplyTemplate();
}
}