WPF:如何访问ListView.ItemTemplate中的元素?

时间:2010-03-04 10:07:05

标签: wpf datatemplate

我需要在C#codebehind的以下XAML代码中为所选列表项访问名为“PageHost”的元素,请问该怎么办?

        <ListView.Resources>
            <p:PageWidthConverter x:Key="PageWidthConverter" />
        </ListView.Resources>
        <ListView.ItemTemplate>
            <DataTemplate x:Name="PagesViewDataTemplate">
                <DataTemplate.Resources>
                    <Style x:Key="PageHostStyle" TargetType="{x:Type p:PageHost}">
                        <Setter Property="Width" Value="{Binding Path=ActualWidth, 
                                                                Converter={StaticResource PageWidthConverter}, 
                                                                RelativeSource={RelativeSource Mode=FindAncestor, 
                                                                AncestorType={x:Type Grid}}}"

                                />
                    </Style>
                </DataTemplate.Resources>
                <p:PageHost x:Name="PageHost">

                </p:PageHost>
            </DataTemplate>
        </ListView.ItemTemplate>

        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel  Orientation="Horizontal" VerticalAlignment="Top">
                    <WrapPanel.LayoutTransform>
                        <ScaleTransform ScaleX="1" ScaleY="1"></ScaleTransform>
                    </WrapPanel.LayoutTransform>
                </WrapPanel>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListItem>
        </ListItem>
</ListView>

1 个答案:

答案 0 :(得分:0)

我想下面的想法会起作用,虽然我没有验证代码。你需要首先找到与SelectedItem相关联的ContentPresenter,然后使用DataTemplate我们可以找到pageHost

 ContentPresenter lstContent = lstViewInstance.ItemContainerGenerator.ContainerFromIndex(lstViewInstance.SelectedIndex) as     ContentPresenter;
 DataTemplate pageViewDataTemplate= this.FindResource("PagesViewDataTemplate") as DataTemplate;
 PageHost pageHost = pageViewDataTemplate.FindName("PageHost", lstContent) as PageHost;