【问题标题】:WindowsPhone 8.1 WebView not showing?Windows Phone 8.1 WebView 不显示?
【发布时间】:2014-04-16 14:59:07
【问题描述】:

我是 windows phone 开发的新手,上周为了这个目的购买了一个 Windows 8.1 刚刚发布 ^^。

我正在尝试按照 Microsoft 初学者教程之一创建 Minibrowser,这是一个非常简单的应用程序,带有文本框、按钮和 web 视图。我知道这是一个 windows phone 8 教程,但认为 windows 8.1 肯定不会有很大不同吗?

我已经完成了教程,但我遇到了 webview 没有实际显示任何内容的问题。

页面视图的 xaml 是

<Page
    x:Class="MiniBrowser.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MiniBrowser"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid x:Name="LayoutRoot">

        <Grid.ChildrenTransitions>
            <TransitionCollection>
                <EntranceThemeTransition/>
            </TransitionCollection>
        </Grid.ChildrenTransitions>

        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!-- TitlePanel -->
        <StackPanel Grid.Row="0" Margin="24,17,0,28">
            <TextBlock Text="My First Application" Style="{ThemeResource TitleTextBlockStyle}" Typography.Capitals="SmallCaps"/>
            <TextBlock Text="Mini Browser" Margin="0,12,0,0" Style="{ThemeResource HeaderTextBlockStyle}"/>
        </StackPanel>

        <!--TODO: Content should be placed within the following grid-->
        <StackPanel Grid.Row="1" x:Name="ContentRoot" Margin="12,0,12,12">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <TextBox x:Name="URL"
                         Text="http://www.xbox.com"
                         TextWrapping="NoWrap"
                         Height="Auto"
                         Width="Auto"
                         HorizontalAlignment="Stretch"
                         VerticalAlignment="Center"
                         Margin="0,0,12,0"/>
                <Button x:Name="Go"
                        Grid.Column="1"
                        Content="Go"
                        Height="Auto"
                        Width="Auto"
                        HorizontalAlignment="Stretch"
                        VerticalAlignment="Center"
                        Margin="12,0,0,0"
                        Click="Go_Click"/>
            </Grid>
            <WebView x:Name="MiniBrowser"
                     Height="Auto"
                     Width="Auto"
                     HorizontalAlignment="Stretch"
                     VerticalAlignment="Stretch"
                     ScrollViewer.ZoomMode="Disabled"
                     ScrollViewer.VerticalScrollBarVisibility="Disabled"
                     Loaded="MiniBrowser_Loaded"
                     NavigationFailed="MiniBrowser_NavigationFailed" NavigationCompleted="MiniBrowser_NavigationCompleted"
                     Visibility="Visible"/>
        </StackPanel>
    </Grid>
</Page>

按钮和webview的相关事件处理程序是

private void Go_Click(object sender, RoutedEventArgs e)
        {
            String site = URL.Text;
            MiniBrowser.Navigate(new Uri(site, UriKind.Absolute));
        }

        private void MiniBrowser_Loaded(object sender, RoutedEventArgs e)
        {
            String site = URL.Text;
            MiniBrowser.Navigate(new Uri(site, UriKind.Absolute));
        }

        private void MiniBrowser_NavigationFailed(object sender, WebViewNavigationFailedEventArgs e)
        {
            ToastTemplateType toastTemplate = ToastTemplateType.ToastImageAndText01;
            XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
            XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
            toastTextElements[0].AppendChild(toastXml.CreateTextNode("Hello World!"));
            ToastNotification toast = new ToastNotification(toastXml);
            ToastNotificationManager.CreateToastNotifier().Show(toast);
        }

        private void MiniBrowser_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
        {
            ToastTemplateType toastTemplate = ToastTemplateType.ToastImageAndText01;
            XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
            XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
            toastTextElements[0].AppendChild(toastXml.CreateTextNode("Nav Complete"));
            ToastNotification toast = new ToastNotification(toastXml);
            ToastNotificationManager.CreateToastNotifier().Show(toast);
        }
    }

我可以从运行页面中看到,在启动时和单击 go 按钮时,导航完成事件被调用,因为导航完成帖子弹出,但不应加载的 xbox 网页不可见.

我已经对演示中显示的 xaml 进行了微调,可以看出,因此我使用 WebView 嵌套了包含地址 TextBox 和 Button 的水平堆栈面板,而不是只有一个 ContentRoot 网格在它下面。

我还使用了 WebView 而不是 phone:WebBrowser 与教程中一样,因为这似乎在 WP8.1 中不存在,所以这很可能是问题...

有谁知道我做错了什么,或者任何人都可以评论我使用的样式是否可以改进。

学习新平台始终是一项挑战,因为您要努力了解如何以不同的方式完成工作; Windows Phone 与我更熟悉的 Android 肯定有很大不同!

提前致谢

编辑:

我尝试通过注释掉页面内容(文本框、按钮和 web 视图)的内容并插入教程中的示例 xaml 来更改 XAML 代码,如下所示

<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <TextBox x:Name="URL" Margin="10,10,85,0" Text="http://www.xbox.com" VerticalAlignment="Top"/>
    <Button x:Name="Go" Content="Go" HorizontalAlignment="Right" Margin="346,10,0,0" VerticalAlignment="Top"/>
    <phone:WebBrowser x:Name="MiniBrowser" Margin="10,82,0,0"/>
</Grid>

但我遇到的问题与以前完全相同,webview 只是显示为黑色,而且通常看起来更糟......

我猜这个问题是由于我使用的预期电话:WebBrowser 和 WebView 之间的差异造成的。

【问题讨论】:

  • 无论谁投了反对票,我都非常感谢您花时间为我认为来自没有经验的 Windows Phone 开发人员提出的一个有点明确的问题添加建设性评论

标签: c# xaml webview windows-phone-8.1


【解决方案1】:

我已经找到并解决了这个问题。问题在于我在 xaml 中声明 webview:

<WebView x:Name="MiniBrowser"
         Height="Auto"
         Width="Auto"
         HorizontalAlignment="Stretch"
         VerticalAlignment="Stretch"
         ScrollViewer.ZoomMode="Disabled"
         ScrollViewer.VerticalScrollBarVisibility="Disabled"
         Loaded="MiniBrowser_Loaded"
         NavigationFailed="MiniBrowser_NavigationFailed"         
         NavigationCompleted="MiniBrowser_NavigationCompleted"
         Visibility="Visible"/>

把它改成

<WebView x:Name="MiniBrowser"
         Height="425"
         HorizontalAlignment="Stretch"
         VerticalAlignment="Stretch"
         ScrollViewer.ZoomMode="Disabled"
         ScrollViewer.VerticalScrollBarVisibility="Disabled"
         Loaded="MiniBrowser_Loaded"
         NavigationFailed="MiniBrowser_NavigationFailed" 
         NavigationCompleted="MiniBrowser_NavigationCompleted"
         Visibility="Visible"/>

它现在可以工作了。似乎问题在于使用 Height="Auto"。这将高度设置为 0,因此实际上并未显示。

【讨论】:

    【解决方案2】:

    我知道这是一个 windows phone 8 教程,但认为 windows 8.1 肯定不会有很大不同吗?

    您正在制作一个 Windows 运行时 应用程序,该应用程序与 Silverlight 应用程序(如该教程中的应用程序)有很大不同。

    如果你想为 Windows Phone 8.1(以及 Windows 8.1)开发你应该遵循 WinRT 教程,我建议你这个:

    http://channel9.msdn.com/Series/Windows-Phone-8-1-Development-for-Absolute-Beginners

    【讨论】:

      猜你喜欢
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2017-06-13
      相关资源
      最近更新 更多