C# 访问ListViewItem模板中的子控件

C# 访问ListViewItem模板中的子控件,c#,xaml,windows-8,C#,Xaml,Windows 8,我一直在玩Windows8代码示例,即BlogReader应用程序。如果您不熟悉这一点,它由一个带有两列的网格组成。左侧是一个列表视图,其中包含提要项的标题。单击时,它会使用提要条目填充右列中的WebView 我不想显示在右边,而是想将WebView直接嵌入到相关列表项的下方,就像GoogleReader那样(基本上是一个手风琴视图)。这就是我想到的 <ListView x:Name="ItemListView" ItemsSource="{Bind

我一直在玩Windows8代码示例,即BlogReader应用程序。如果您不熟悉这一点,它由一个带有两列的网格组成。左侧是一个列表视图,其中包含提要项的标题。单击时,它会使用提要条目填充右列中的WebView

我不想显示在右边,而是想将WebView直接嵌入到相关列表项的下方,就像GoogleReader那样(基本上是一个手风琴视图)。这就是我想到的

      <ListView x:Name="ItemListView"  
            ItemsSource="{Binding Items}"
            Margin="60,0,0,10"
            SelectionChanged="ItemListView_SelectionChanged">

            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding Title}"  
                       FontSize="24" Margin="5,0,0,0" TextWrapping="Wrap" />
                        <TextBlock Text="{Binding Author}" 
                       FontSize="16" Margin="15,0,0,0"/>
                        <TextBlock Text="{Binding Path=PubDate, Converter={StaticResource dateConverter}}" 
                       FontSize="16" Margin="15,0,0,0"/>
                        <WebView Margin="0,5,20,20"/>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>

        </ListView>

如何访问ListItem中的WebView?我知道渲染后无法访问模板,但必须有方法在ListItem中访问该WebView?或者它只是从未被创造过


我尝试了很多不同的方法来访问listView的选定项,然后查找子项,但都没有成功

与其插入webview,不如简单地将
webview的
可见性设置为
折叠的
,直到您准备好使用它。在
列表视图
绑定到的每个项目上,都有两个属性:一个是webview的内容,另一个是绑定到webview可见性的属性。这样,您可以通过更改content属性的值来设置webview的内容,然后只需将其可见性更改为
Visible

大概是这样的:

public class Item
{
    Uri content;
    public Uri Content
    {
        get
        {
            return content;
        }
    }
    public Visibility Visible
    {
        get
        {
            if(content != null)
                return Visibility.Visible;
        }
    }
}

<WebView Content="{Binding Content}" Visibility="{Binding Visible}" Margin="0,5,20,20"/>
公共类项目
{
Uri内容;
公共Uri内容
{
得到
{
返回内容;
}
}
公众能见度可见
{
得到
{
如果(内容!=null)
返回可见性。可见;
}
}
}

啊!那很聪明。我试试看。谢谢由于更改项目的来源被证明是相当麻烦的,所以没有取得巨大的成功,但我认为理论上这应该是可行的。再次感谢这是我一直以来的做法。:-)祝你好运。我花了很多时间修改ListView绑定的数据。不过这是另一个问题。如果我将DataContext设置为集合,然后更改该集合,它将不会更新。如果我将DataContext设置为集合的新实例,它将无法再访问ItemListView.SelectedIndex。您是否实现了
INotifyPropertyChanged
?另外,您是在设置
列表视图的
数据上下文
还是
项目资源