1

我已经下载了一个示例解决方案,该解决方案使用从 usercontrol 继承但没有 .xaml 设计文件的控件的 DefaultStyleKeyProperty 的 OverrideMetadata 方法,这将成为具有相似或几乎相同布局的其他子控件的基本控件。可以在此处找到代码示例

现在我正在尝试从基类访问位于其被覆盖样式的内容模板中的按钮,名称为“btnTest1”,但我找不到执行此操作的方法。

我想知道是否有办法在基类构造函数或子类构造函数中找到控件(可能在调用 InitializeComponent 之后),因为我需要稍后在代码隐藏中访问它。

提前致谢。

大卫。

4

1 回答 1

1

有一个样式模式。

在您要覆盖的 control.cs 文件中OnApplyTemplate

protected override void OnApplyTemplate(){

      Button yourButtonControl = GetTemplateChild("TheNameOfYourButton") as Button;

      base.OnApplyTemplate();
}
  1. 如果您想遵循 Microsoft 模式,那么首先您需要将控件命名为“ PART_SomethingButton”。这只是意味着它是一个模板部分。

  2. 然后在您的Control.cs班级中,attribute在控件上添加一个。

    • 这告诉任何覆盖您的默认样式的人,如果他们希望您的代码正常工作,他们需要Button在他们的模板上有一个名为 PART_SomethingButton

.

[TemplatePart(Name = "PART_SomethingButton", Type = typeof(Button))]
public class MyControl : Control
  1. 在您的类中,添加一个私有 Button 控件。
    • 我们将使用它在整个控件中访问我们的按钮

.

[TemplatePart(Name = "PART_SomethingButton", Type = typeof(Button))]
public class MyControl : Control{
     private Button _partSomethingButton;
}
  1. 然后最后在您的 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();
    }
}
于 2016-07-21T13:31:19.607 回答