C# WPF 在具有覆盖 DefaultStyleKeyProperty 的控件的控件模板中查找控件
C# WFP Find control in control template of a control with override DefaultStyleKeyProperty
我下载了一个示例解决方案,该解决方案使用继承自用户控件但没有 .xaml 设计文件的控件的 DefaultStyleKeyProperty 的 OverrideMetadata 方法,并且它将成为其他子控件的基础控件具有相似或几乎相同的布局。
代码可以在这里找到 Example.
现在我试图从基础 class 访问位于其覆盖样式的内容模板中的按钮,名称为 "btnTest1",但我找不到方法这个。
我想知道是否有办法在基本 class 构造函数或子class 构造函数(可能在调用 InitializeComponent 之后)中找到控件,因为我需要稍后可以在代码隐藏中访问它。
提前致谢。
大卫.
有一个样式模式。
在您要覆盖的 control.cs 文件中 OnApplyTemplate
protected override void OnApplyTemplate(){
Button yourButtonControl = GetTemplateChild("TheNameOfYourButton") as Button;
base.OnApplyTemplate();
}
如果您想遵循 Microsoft 模式,那么首先您需要将控件命名为“PART_SomethingButton
”。这只是意味着它是一个模板部分。
然后在你的Control.cs
class控件中添加一个attribute
。
- 这告诉覆盖您的默认样式的任何人,如果他们想让您的代码正常工作,他们需要在模板上使用名称为 PART_SomethingButton
的 Button
.
[TemplatePart(Name = "PART_SomethingButton", Type = typeof(Button))]
public class MyControl : Control
- 在您的 class 内,添加一个私有 Button 控件。
- 我们将使用它在整个控件中访问我们的按钮
.
[TemplatePart(Name = "PART_SomethingButton", Type = typeof(Button))]
public class MyControl : Control{
private Button _partSomethingButton;
}
- 最后在您的 OnApplyTemplate 中设置您的私人按钮。
- 这将进入模板并将按钮缓存在我们的 cs 文件中,以便我们可以对其进行操作或捕获事件。
.
[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();
}
}
我下载了一个示例解决方案,该解决方案使用继承自用户控件但没有 .xaml 设计文件的控件的 DefaultStyleKeyProperty 的 OverrideMetadata 方法,并且它将成为其他子控件的基础控件具有相似或几乎相同的布局。 代码可以在这里找到 Example.
现在我试图从基础 class 访问位于其覆盖样式的内容模板中的按钮,名称为 "btnTest1",但我找不到方法这个。
我想知道是否有办法在基本 class 构造函数或子class 构造函数(可能在调用 InitializeComponent 之后)中找到控件,因为我需要稍后可以在代码隐藏中访问它。
提前致谢。
大卫.
有一个样式模式。
在您要覆盖的 control.cs 文件中 OnApplyTemplate
protected override void OnApplyTemplate(){
Button yourButtonControl = GetTemplateChild("TheNameOfYourButton") as Button;
base.OnApplyTemplate();
}
如果您想遵循 Microsoft 模式,那么首先您需要将控件命名为“
PART_SomethingButton
”。这只是意味着它是一个模板部分。然后在你的
Control.cs
class控件中添加一个attribute
。- 这告诉覆盖您的默认样式的任何人,如果他们想让您的代码正常工作,他们需要在模板上使用名称为 PART_SomethingButton 的
Button
.
[TemplatePart(Name = "PART_SomethingButton", Type = typeof(Button))]
public class MyControl : Control
- 在您的 class 内,添加一个私有 Button 控件。
- 我们将使用它在整个控件中访问我们的按钮
.
[TemplatePart(Name = "PART_SomethingButton", Type = typeof(Button))]
public class MyControl : Control{
private Button _partSomethingButton;
}
- 最后在您的 OnApplyTemplate 中设置您的私人按钮。
- 这将进入模板并将按钮缓存在我们的 cs 文件中,以便我们可以对其进行操作或捕获事件。
.
[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();
}
}