我在ResourceDictionary Generic.xaml
中覆盖了控件的模板。在那我添加了一个按钮,我想在上面添加一些事件。
<Setter Property="Template">
<Setter.Value>
--Added my button here.
</Setter.Value>
</Setter>
所以在控制的加载事件中,我做了
Button b = (Button)mycontrol.Template.FindName("PARTName", mycontrol)
//Add Events on my button
我在互联网上的一些地方看到了我可以做的
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
UIElement editingelement = GetTemplateChild("PART_EditingElement");
if (editingelement != null)
{
// do something
}
}
当我尝试对
GetTemplateChild
进行此建议时,请说“请勿使用”。所以我的问题是
GetTemplateChild
。它过时了吗?和FrameWorkTemplate.FindName
和ControlTemplate.FindName
有什么区别? 最佳答案
1。
唯一的区别是,在以下情况下,GetTemplateChild
将返回null
:
DependencyObject
(我不知道这是否可能)。 否则,此代码:
this.GetTemplateChild(name)
从字面上等效于以下代码:
this.Template.FindName(name, this)
我不知道为什么将其标记为“请勿使用”。我注意到该注释存在于MSDN页面上的version 3中,并已从version 3.5中删除,但我不知道这是否意味着任何意义。
2。
你是说
FrameworkElement
吗?就像Jens所说的那样,ControlTemplate
继承了FrameworkTemplate
,它们都使用FrameworkTemplate.FindName
方法。但是FrameworkTemplate.FindName和FrameworkElement.FindName不同。 FrameworkElement.FindName
仅查看子元素内部,而不查看模板,而FrameworkTemplate.FindName
仅查看模板自身的元素,而不查看模板所应用的父元素。关于c# - .NET 3.5中的GetTemplateChild是否已过时?FrameWorkTemplate.FindName和ControlTemplate.FindName之间有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16352604/