1

我正在制作一个win8应用程序。我有一个带有 DataTemplate 的 ItemsControl。在这个 DataTemplate 里面,有一个 Grid。在这个 Grid 里面有一个 WebView 和一个 ProgressRing。我在 WebView 上有一个 LoadCompleted 事件,此时我想禁用 ProgressRing。我的想法是使用以下内容:

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

这有时有效,但有时它声称 ((sender as 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>
4

1 回答 1

1

我根本不会在 ItemsControl 中使用 WebView,但是您可以尝试将整个模板放在 UserControlm 中,然后在 UserControl 中处理事件并且不需要关心发件人,因为您只需命名 Grid并访问一个命名的网格。

于 2013-03-25T21:58:25.920 回答