WPF Как получить контроль во вложенном шаблоне - PullRequest
1 голос
/ 16 ноября 2010

Итак, я видел много и много примеров, когда у кого-то есть отличный шаблон данных с элементом управления, и его элемент управления контентом применяет шаблон, и его код должен его захватить.

Но вот что у меня есть:

<DataTemplate x:Key="frontTemplate" >
    <StackPanel x:Name="noWork">
        <Image Source="Images/1.png" Stretch="Fill" Width="72" Height="96" x:Name="FrontFace"   HorizontalAlignment="Left" VerticalAlignment="Top"></Image>
    </StackPanel>
</DataTemplate>

<DataTemplate x:Key="flipItemTemplate">
    <Grid Width="200" Height="200">
        <Border x:Name="frontHost" Background="Transparent">
            <ContentPresenter  Content="{Binding}" ContentTemplate="{StaticResource frontTemplate}" />
        </Border>
    </Grid>
</DataTemplate>

Вы видите, что у меня есть шаблон данных (frontTemplate), вложенный в другой шаблон данных (flipItemTemplate).Что мне нужно сделать, это получить доступ к Stackpanel в frontTemplate.Все мои попытки добраться до предъявителя контента для этой таблицы данных потерпели неудачу.Я надеюсь, что мудрые мудрецы из StackOverflow помогут мне.Как, во имя Бога, я бы попал на эту панель ????

Спасибо !!

1 Ответ

3 голосов
/ 16 ноября 2010

Если ваш XAML определен так:

<Grid Name="mainGrid">
    <Grid.Resources>
    <DataTemplate x:Key="frontTemplate" >
        <StackPanel x:Name="noWork">
            <Image Source="Images/1.png" Stretch="Fill" Width="72" Height="96" x:Name="FrontFace"   HorizontalAlignment="Left" VerticalAlignment="Top"></Image>
        </StackPanel>
    </DataTemplate>

    <DataTemplate x:Key="flipItemTemplate">
        <Grid Width="200" Height="200">

            <Border x:Name="frontHost" Background="Transparent">
                <ContentPresenter Name="contentPresenter"  Content="{Binding}" ContentTemplate="{StaticResource frontTemplate}" />
            </Border>
        </Grid>
    </DataTemplate>
    </Grid.Resources>
</Grid>

Вы можете использовать:

var template = mainGrid.FindResource("frontTemplate") as DataTemplate;
var stackPanel = template.LoadContent() as StackPanel;
...