C#WFP使用覆盖DefaultStyleKeyProperty在控件的控件模板中查找控件

时间:2016-07-21 10:30:51

标签: c# wpf inheritance metadata contenttemplate

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

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

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

提前致谢。

大卫。

1 个答案:

答案 0 :(得分:0)

这有一种风格模式。

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

protected override void OnApplyTemplate(){

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

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

  2. 然后在Control.cs课程中,在控件上添加attribute

    • 这告诉任何人覆盖您的默认样式,如果他们希望您的代码有效,他们需要在其模板上使用名称为PART_SomethingButton的<{1}}
  3. Button
    1. 在您的课程内部添加一个私人Button控件。
      • 我们将使用它来访问整个控件中的按钮
    2. [TemplatePart(Name = "PART_SomethingButton", Type = typeof(Button))]
      public class MyControl : Control
      
      1. 然后最终在OnApplyTemplate中设置您的私人按钮。
        • 这将进入模板并缓存我们的cs文件中的按钮,以便我们可以操作它或从中捕获事件。
      2. [TemplatePart(Name = "PART_SomethingButton", Type = typeof(Button))]
        public class MyControl : Control{
             private Button _partSomethingButton;
        }