2012-09-19 86 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