0

Windows ストア アプリケーションの FlipView コントロール内で Web サイトを開こうとしています。これが私のコードです:

protected override async void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
    var template = flipView.ItemTemplate;
    var grid = (Grid)template.LoadContent();
    var webView = (WebView)grid.Children[0];

    webView.Navigate(new Uri("http://www.google.com"));
}

private void contentView_LoadCompleted_1(object sender, NavigationEventArgs e)
{
    var template = flipView.ItemTemplate;
    var grid = (Grid)template.LoadContent();
    var webView = (WebView)grid.Children[0];
    webView.Visibility = Windows.UI.Xaml.Visibility.Visible;
}

および XAML:

  <FlipView
        x:Name="flipView"
        AutomationProperties.AutomationId="ItemsFlipView"
        AutomationProperties.Name="Item Details"
        TabIndex="1"
        Grid.RowSpan="2"
        ItemsSource="{Binding Source={StaticResource itemsViewSource}}">

        <FlipView.ItemContainerStyle>
            <Style TargetType="FlipViewItem">
                <Setter Property="Margin" Value="0,137,0,0"/>
            </Style>
        </FlipView.ItemContainerStyle>

        <FlipView.ItemTemplate>
            <DataTemplate>
                <Grid x:Name="Output">
                            <WebView x:Name="WebView1" Visibility="Collapsed" LoadCompleted="contentView_LoadCompleted_1"/>
                            <Rectangle x:Name="BlockingRect"/>
                </Grid>
            </DataTemplate>
        </FlipView.ItemTemplate>
    </FlipView>

たぶん、誰かが以前にこの問題に直面しましたか?解決策は何ですか?

4

2 に答える 2

3

callisto WebViewExtension https://github.com/timheuer/callisto/wiki/WebViewExtensionは、WebView コンテンツを FlipView にバインドするために私が見つけた最良の方法です。

デフォルトの使用法では、FlipView がそれらを WebView にフォールスルーさせるのではなく処理しているため、WebView 項目内の一部のタッチ (具体的にはタップ) インタラクションにまだ問題があります。したがって、WebView 内のリンクを操作できなくなります。これは、クリックが WebView にフォールスルーするため、マウスを使用する場合には問題になりません。

于 2012-12-01T20:01:17.427 に答える
0

最初にフレームワークに Uniq 名を付けます Controll のように、 x:Name="ItemDetailPageWebView" Code Behind What I Wright Down below をコピーして貼り付けます

XAML:

    <FlipView x:Name="flipView"
       AutomationProperties.AutomationId="ItemsFlipView"
       AutomationProperties.Name="Item Details"
       TabIndex="1" Grid.Row="1"
       ItemsSource="{Binding Source={StaticResource itemsViewSource}}"   
       Loaded="ItemDetailPageflipView_Loaded">
              <FlipView.ItemTemplate>
                  <DataTemplate>
                     <Grid>       
                        <ScrollViewer Margin="0,0,0,0" Style="{StaticResource HorizontalScrollViewerStyle}" >
                            <StackPanel  Orientation="Horizontal" Height="628" Width="2755">
                                  <WebView x:Name="ItemDetailPageWebView" Height="443" Margin="53,82,0,0" VerticalAlignment="Top" Width="435" />
                            </StackPanel>
                      </ScrollViewer>
                 </Grid>
            </DataTemplate>
        </FlipView.ItemTemplate>
    </FlipView>

C#:

//-----------------------------------------------------------------------------------
            public static T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
                {
                    var child = VisualTreeHelper.GetChild(parent, i);
                    string controlName = child.GetValue(Control.NameProperty) as string;
                    if (controlName == name)
                    {
                        return child as T;
                    }
                    else
                    {
                        T result = FindVisualChildByName<T>(child, name);
                        if (result != null)
                            return result;
                    }
                }
                return null;
            }

            //Here FlipView Loaded Event 
            private void ItemDetailPageflipView_Loaded(object sender, RoutedEventArgs e)
            {
                WebView ItemDetailPageWebView = FindVisualChildByName<WebView>(this.flipView, "ItemDetailPageWebView");
                ItemDetailPageWebView.Navigate(new Uri("http://www.google.com"));
            }

        //-----------------------------------------------------------------------------------

助けてくれたら + を付けて、[回答] をクリックします。ハッピーコーディング;)

于 2013-01-28T13:58:20.930 に答える