Я хочу получить доступ к одному из именованных элементов в исходном шаблоне управления, который использует другой элемент, в коде.Как я могу получить доступ к именованному элементу 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'). Я посмотрю на «Бесшумные элементы управления», я обнаруживаю, что я не понимаю WPF почти так же хорошо, как я и думал. Как временное исправление, я думаю, что я не буду использовать шаблоны и просто повторяю один и тот же код, пока не найду время, чтобы посмотреть на эту статью более подробно. –
@ Да, это не твоя вина. Чтобы получить все необходимые дисциплины, требуется много лет, чтобы все было хорошо вместе. Технологии немного смешиваются, но как только вы начинаете заниматься сложными вещами, они начинают разрастаться. Если бы я мог указать вам в направлении, то нужно было бы изучить архитектуру MVVM и научиться строить бесполезные элементы управления. Вы будете благодарить себя и быть ближе к большинству. –