1

私はwin8アプリを作っています。私は DataTemplate を持つ ItemsControl を持っています。この DataTemplate 内に 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) が null であると主張することもあります。これらの場合、送信者はまだ正しい WebView であることをデバッグから確認しました。WebView が画面に表示され、正しくフォーマットされています。では、親が null になる可能性はありますか?

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 に答える