2013-03-25 79 views
1

我正在製作一個win8應用程序。我有一個DataTemplate的ItemsControl。在這個DataTemplate裏面,有一個Grid。在這個Grid內部有一個WebView和一個ProgressRing。我在WebView上有一個LoadCompleted的事件,那時我想禁用ProgressRing。我的想法是使用以下物質:ItemsControl DataTemplate中的XAML元素有時有空值(WinRT)

ProgressRing pr = ((sender as FrameworkElement).Parent as Grid).Children.First(t => t.GetType().Equals(typeof(ProgressRing))) as ProgressRing; 
    pr.IsActive = false; 

而這個作品有時,但有時它聲稱((發件人爲FrameworkElement的).Parent)爲空。我從調試中證實,在這些情況下,發件人仍然是正確的WebView。 WebView正在屏幕上顯示並且格式正確 - 那麼它的父項如何可以爲空?

這裏的XAML:

   <ItemsControl Margin="40,0,40,0" x:Name="resultsItemsControl"> 
        <ItemsControl.ItemsPanel> 
         <ItemsPanelTemplate> 
          <StackPanel Orientation="Horizontal"></StackPanel> 
         </ItemsPanelTemplate> 
        </ItemsControl.ItemsPanel> 
        <ItemsControl.ItemTemplate> 
         <DataTemplate> 
          <Grid Margin="50,0"> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="auto"></RowDefinition> 
            <RowDefinition Height="*"></RowDefinition> 
            <RowDefinition Height="30"></RowDefinition> 
           </Grid.RowDefinitions> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="150" MaxWidth="150"></ColumnDefinition> 
            <ColumnDefinition Width="auto"></ColumnDefinition> 
            <ColumnDefinition Width="100" MaxWidth="100"></ColumnDefinition> 
            <ColumnDefinition Width="*"></ColumnDefinition> 
           </Grid.ColumnDefinitions> 
           <Button Grid.Column="0" x:Name="viewInBrowser" IsEnabled="False" Style="{StaticResource PreviewLinkAppBarButtonStyle}" Margin="0,0,40,0" Click="viewInBrowser_Click_1"></Button> 
           <TextBlock HorizontalAlignment="Left" TextAlignment="Left" Grid.Column="1" FontSize="30" Margin="0,20,0,20" FontWeight="Bold" FontFamily="Georgia" VerticalAlignment="Center" Text="{Binding Name}"></TextBlock> 
           <ProgressRing x:Name="loadingProgressRing" Margin="20,0" Grid.Column="2" Foreground="White" IsActive="True" HorizontalAlignment="Left" VerticalAlignment="Center"></ProgressRing> 

           <WebView ScriptNotify="WebView_ScriptNotify_1" Grid.Column="0" Grid.ColumnSpan="14" Grid.Row="1" Source="{Binding CurrentSearchUrl}" Width="0" LoadCompleted="WebView_LoadCompleted_1"></WebView> 
          </Grid> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 
+0

在構建可視化樹之前,您可能需要等待。在Loaded && LoadCompleted之後執行您的操作。 – 2013-03-26 06:43:27

回答

1

在一個ItemsControl我不會用的WebView可言,但你可以嘗試把你的整個模板在UserControlm那麼你處理用戶控件和唐內的事件不需要關心發件人,因爲您只需將網格命名並訪問指定的網格即可。

相關問題