通用Windows平台上的导航



我正在开发一个Windows通用应用程序,该应用程序使用webview托管一个web应用程序。步骤如下。

  1. 正在创建空白通用窗口应用程序。创建启动屏幕。设置启动屏幕作为起始页。活动结束后,我想导航具有web视图控件的主页面
  2. 设置一个url示例"http://www.google.come"作为web视图的源。一切都很好,但主页需要时间,我希望在加载之前看到相同的启动屏幕
  3. 我正在使用的导航代码这框架导航(类型为(主页))

完整源代码

public sealed partial class ExtentedSpash : Page
{
    public ProgressMessage Progress;
    public ExtentedSpash()
    {
        this.InitializeComponent();
        Progress = ProgressMessage.GetMessage();
        DataContext = Progress;
        Window.Current.Activate();
        Loaded += Splash_Loaded;
    }
    private async void Splash_Loaded(object sender, RoutedEventArgs e)
    {
        await Initialize();
        Window.Current.Activate();
        await ClearBrowserCache();
        Window.Current.Activate();
        //Task.WaitAll(TaskList.ToArray());
        await StartApplication();
    }

    public async Task Initialize()
    {
        Progress.ActionMessage = "Initialize the controls";
        await Task.Delay(TimeSpan.FromSeconds(10));
    }
    public async Task ClearBrowserCache()
    {
        Progress.ActionMessage = "Clear Browser Cache";
        await Task.Delay(TimeSpan.FromSeconds(10));
    }
    public async Task StartApplication()
    {
        Progress.ActionMessage = "Loading";
        await Task.Delay(TimeSpan.FromSeconds(10));
        this.Frame.Navigate(typeof(MainPage));
    }
    private void btnMain_Click(object sender, RoutedEventArgs e)
    {
    }
}
public class ProgressMessage : INotifyPropertyChanged
{
    private string statusMessage;
    public string StatusMessage
    {
        get { return statusMessage; }
        set
        {
            statusMessage = value;
            RaiseProperChanged();
        }
    }
    private string actionMessage;
    public string ActionMessage
    {
        get { return actionMessage; }
        set
        {
            actionMessage = value;  
            RaiseProperChanged();
        }
    }
    private bool showProgress;
    public bool ShowProgress
    {
        get { return showProgress; }
        set { showProgress = value;
            RaiseProperChanged();
        }
    }

    public static ProgressMessage GetMessage()
    {
        var msg = new ProgressMessage()
        {
            StatusMessage = "Initializing Application",
            ActionMessage = "One moment please...",
            showProgress = true
        };
        return msg;
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void RaiseProperChanged(
       [CallerMemberName] string caller = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(caller));
        }
    }

}

}

我希望"正在加载"消息应该显示,直到它完全加载应用程序。

正如我们所讨论的,如果你只想在WebView的源代码没有完全加载时覆盖它,你可以这样做:

<Page.Resources>
    <Storyboard x:Key="MyTextSTD" x:Name="MyTextSTD" RepeatBehavior="Forever">
        <ColorAnimationUsingKeyFrames Storyboard.TargetName="tbbrush" Storyboard.TargetProperty="Color" Duration="0:0:10">
            <DiscreteColorKeyFrame KeyTime="0:0:0" Value="Red" />
            <LinearColorKeyFrame KeyTime="0:0:5" Value="Blue" />
            <LinearColorKeyFrame KeyTime="0:0:10" Value="Purple" />
        </ColorAnimationUsingKeyFrames>
    </Storyboard>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <WebView Source="https://msdn.microsoft.com/library/windows/apps/xaml/mt244352.aspx" NavigationCompleted="WebView_NavigationCompleted">
    </WebView>
    <Grid x:Name="loadingGrid" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Visibility="Visible">
        <TextBlock Text="On Loading..." FontSize="50" VerticalAlignment="Center" HorizontalAlignment="Center">
            <TextBlock.Foreground>
                <SolidColorBrush x:Name="tbbrush" />
            </TextBlock.Foreground>
        </TextBlock>
    </Grid>
</Grid>

背后的代码:

public MainPage()
{
    this.InitializeComponent();
    MyTextSTD.Begin();
}
private void WebView_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
{
    loadingGrid.Visibility = Visibility.Collapsed;
}

这里很简单,我使用TextBlock和一些彩色动画来显示消息。当WebView的源完全加载时,此消息将消失。

相关内容

  • 没有找到相关文章

最新更新