1
我想在代码隐藏中访问另一个元素正在使用的原始控件模板中的某个指定元素。如何通过代码隐藏访问ControlTemplate的指定元素?
这是XAML代码的例子(显然原来比较复杂,或者我只是在XAML中做这个):
<Window x:Class="Temp.MainWindow" Title="MainWindow">
<Window.Resources>
<ControlTemplate x:Key="MyTemplate" TargetType="{x:Type Expander}">
<Expander Header="Some header">
<StackPanel>
<Grid Name="MyGrid"/>
</StackPanel>
</Expander>
</ControlTemplate>
</Window.Resources>
<Grid>
<Expander Name="expander" Template="{DynamicResource MyTemplate}"/>
</Grid>
</Window>
我已经试过:
public MainWindow()
{
InitializeComponent();
Grid grid = expander.Template.FindName("MyGrid", expander) as Grid;
}
我也试着
Grid grid = expander.Template.Resources.FindName("MyGrid") as Grid;
但g
总是null
。
我看:
- How do I access an element of a control template from within code behind?
- How to access a WPF control located in a ControlTemplate
- How do I programmatically interact with template-generated elements Part I
上面的链接是我得到了我的工作的代码,但由于某种原因,g
只是总是null
。我在做ContentTemplate的问题吗?任何帮助,将不胜感激!
谢谢,但没有奏效('grid'仍然是'null')。我会研究Lookless Controls,我发现我不像我以前那样了解WPF。 作为一个临时修复,我想我会避免使用模板,并重复使用相同的代码,直到我有时间更详细地查看该文章。 –
@Debra是啊,这不是你的错。为了让所有的事情都能很好地结合在一起,需要多年时间才能获得所需的所有学科。这些技术确实混合了一些,但一旦你开始与他们做复杂的事情,开始发生不可思议的事情。如果我能指出一个方向,那就是学习MVVM架构,并学习如何构建不寻常的控件。你会感谢你自己,并且比大多数人更进一步。 –