2012-09-19 47 views
0

我一直在玩Windows 8代码示例 - 即BlogReader应用程序。如果你不熟悉这个,它由一个有两列的网格组成。左边是带有Feed项目标题的ListView。单击时,它会使用Feed条目填充右列中的WebView。在ListViewItem模板中访问子控件

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

 <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?还是它从来没有创建?

我试过的访问列表视图中选择项目,然后找孩子,但没有成功

回答

0

而不是插入的WebView不同的方式加载时,它会更容易简单地设置WebviewVisibilityCollapsed,直到您准备好使用它。在你的ListView所绑定的每个项目上,都有两个属性:一个是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"/> 
+0

啊!这很聪明。我会尝试的。谢谢! – roryok

+0

并没有取得巨大的成功,因为改变项目的来源非常麻烦,但我认为理论上这应该起作用。再次感谢 – roryok

+0

这是我一直这样做的方式。 :-) 祝你好运。 – mydogisbox