Доступ к элементу из DataTemplate
<Window x:Class="GeneratedTemplateDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow">
<Window.Resources>
<DataTemplate x:Key="FirstTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Content="simple button1" />
<DataGrid x:Name="dataGridFromDataTemplate" Grid.Row="1" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="SecondTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Content="simple button2" />
<DataGrid x:Name="dataGridFromDataTemplate" Grid.Row="1" Background="CadetBlue"/>
</Grid>
</DataTemplate>
<Style x:Key="MyContentControlStyle" TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=TemplateOneToApply}" Value="True">
<Setter Property="ContentTemplate" Value="{DynamicResource FirstTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=TemplateTwoToApply}" Value="False">
<Setter Property="ContentTemplate" Value="{DynamicResource SecondTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid x:Name="MyGrid">
<ContentControl x:Name="ContentControl" Content="{Binding}" Style="{StaticResource MyContentControlStyle}" />
</Grid>
</Window>
Где TemplateOneToApply - логическое значение: когда оно истинно, я применяю первый шаблон, а когда его значение ложно, я применяю второй шаблон.
мой вопрос:
Как я могу получить доступ к элементу dataGridFromDataTemplate из кода позади
1 ответ
Решение
Вы не должны использовать ContentControl, попробуйте использовать ContentPresent
<Grid x:Name="MyGrid">
<ContentPresenter x:Name="ContentControl" Content="{Binding}" Style="{StaticResource MyContentControlStyle}" />
</Grid>
И за кодом вы должны явно сказать применить шаблон, чтобы получить его
ContentControl.ApplyTemplate();
var dataGrid = ContentControl.ContentTemplate.FindName("dataGridFromDataTemplate", ContentControl) as DataGrid;