ItemsControl数据模板中的XAML元素有时具有空父级(WinRT)
我正在制作一个win8应用程序。我有一个带有DataTemplate的ItemsControl。在这个数据模板中,有一个网格。在这个网格中有一个WebView和一个ProgressRing。我在WebView上有一个LoadCompleted事件,此时我想禁用ProgressRing。我的想法是使用以下方法:ItemsControl数据模板中的XAML元素有时具有空父级(WinRT),xaml,windows-runtime,winrt-xaml,Xaml,Windows Runtime,Winrt Xaml,我正在制作一个win8应用程序。我有一个带有DataTemplate的ItemsControl。在这个数据模板中,有一个网格。在这个网格中有一个WebView和一个ProgressRing。我在WebView上有一个LoadCompleted事件,此时我想禁用ProgressRing。我的想法是使用以下方法: ProgressRing pr = ((sender as FrameworkElement).Parent as Grid).Children.First(t => t.G
ProgressRing pr = ((sender as FrameworkElement).Parent as Grid).Children.First(t => t.GetType().Equals(typeof(ProgressRing))) as ProgressRing;
pr.IsActive = false;
这有时有效,但有时它声称((发送者作为FrameworkElement).Parent)为null。我通过调试验证,在这些情况下,发送者仍然是正确的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>
我根本不会在ItemsControl中使用WebView,但您可以尝试将整个模板放在UserControlm中,然后在UserControl中处理事件,而不需要关心发件人,因为您可以命名网格并访问命名网格。我根本不会在ItemsControl中使用WebView,但您可以尝试将整个模板放在UserControlm中,然后在UserControlm中处理事件,而不需要关心发送者,因为您可以命名网格并访问命名网格。您可能希望在构建可视化树之前等待。启动Loaded&&LoadCompleted后执行操作。您可能希望在构建可视化树之前等待。启动Loaded&&LoadCompleted后执行操作。