Nik*_*wal 6 c# wpf controltemplate
我覆盖了 ResourceDictionary 中控件的模板Generic.xaml
。我添加了一个按钮,我想在上面添加一些事件。
<Setter Property="Template">
<Setter.Value>
--Added my button here.
</Setter.Value>
</Setter>
Run Code Online (Sandbox Code Playgroud)
所以在加载控制事件中我做了
Button b = (Button)mycontrol.Template.FindName("PARTName", mycontrol)
//Add Events on my button
Run Code Online (Sandbox Code Playgroud)
我在互联网上读到的一些我可以做的地方
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
UIElement editingelement = GetTemplateChild("PART_EditingElement");
if (editingelement != null)
{
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试做这个建议时GetTemplateChild
说不要使用。
所以我的问题是
为什么不使用GetTemplateChild
. 它过时了吗?和
FrameWorkTemplate.FindName
和 和有ControlTemplate.FindName
什么区别?
1.
唯一的区别是它将在以下情况下GetTemplateChild
返回null
:
DependencyObject
(我不知道这是否可能)。否则,这段代码:
this.GetTemplateChild(name)
Run Code Online (Sandbox Code Playgroud)
从字面上看相当于这段代码:
this.Template.FindName(name, this)
Run Code Online (Sandbox Code Playgroud)
我不知道为什么它被标记为“请勿使用”。我注意到此注释存在于版本 3的 MSDN 页面上,并从版本 3.5中删除,但我不知道这是否意味着什么。
2.
你的意思FrameworkElement
?就像 Jens 所说,ControlTemplate
继承FrameworkTemplate
,并且他们都使用该FrameworkTemplate.FindName
方法。但FrameworkTemplate.FindName和FrameworkElement.FindName是不同的。FrameworkElement.FindName
只查看子元素内部,而不查看模板,而FrameworkTemplate.FindName
只查看模板自己的元素,而不查看其应用的父元素。