首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# WFP在覆盖DefaultStyleKeyProperty的控件的控制模板中找到控制

C# WFP在覆盖DefaultStyleKeyProperty的控件的控制模板中找到控制
EN

Stack Overflow用户
提问于 2016-07-21 10:30:50
回答 1查看 240关注 0票数 1

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

现在,我试图从基类访问overriden样式内容模板中的一个按钮,名为"btnTest1",但我找不到这样做的方法。

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

提前谢谢。

大卫。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-21 13:31:19

这有一个样式模式。

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

代码语言:javascript
复制
protected override void OnApplyTemplate(){

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

      base.OnApplyTemplate();
}
  1. 如果您想遵循Microsoft模式,那么首先要将控件命名为"PART_SomethingButton“。这只意味着它是一个模板部件。
  2. 然后在您的Control.cs类中,在控件上添加一个attribute
代码语言:javascript
复制
- This tells anyone that overrides your default style that if they want your code to work, they need to have a `Button` on their template with the name PART\_SomethingButton

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

代码语言:javascript
复制
[TemplatePart(Name = "PART_SomethingButton", Type = typeof(Button))]
public class MyControl : Control{
     private Button _partSomethingButton;
}
  1. 最后,在OnApplyTemplate中设置您的私有按钮。
    • 这将进入模板,并将按钮缓存在cs文件中,以便我们可以操作它或从中捕获事件。

代码语言:javascript
复制
[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();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38501804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档