繁体   English   中英

C#WFP在具有重写DefaultStyleKeyProperty的控件的控件模板中查找控件

[英]C# WFP Find control in control template of a control with override DefaultStyleKeyProperty

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

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

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

提前致谢。

大卫。

有一个样式模式。

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

protected override void OnApplyTemplate(){

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

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

  2. 然后在Control.cs类中,在Control上添加一个attribute

    • 这告诉任何覆盖您默认样式的人,如果他们想要您的代码起作用,则需要在模板上有一个名称为PART_SomethingButton的Button

[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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM