1

在 XAML 用户控件中,Frame 对象为空:

this.Frame.Navigate(typeof(FaxPropertiesPage));

如何使用 Windows 8 XAML 用户控件在页面之间导航?我已将控件放置在 XAML 页面上的 Callisto Flyout 中。

下面的搜索按钮必须将用户导航到另一个 XAML 页面。

在此处输入图像描述

4

3 回答 3

5

我已成功使用 app.xaml.cs 中的代码

Frame frame = Window.Current.Content as Frame;

然后使用标准的导航代码。

于 2012-12-31T10:15:23.153 回答
1

简单的代码(可能不是 100% 有效)是:

框架框架 = 新框架();frame.Navigate(typeof(ExerciseAddPage)

于 2012-12-27T02:23:18.983 回答
1

有好的方法和不太好的方法:

它们都从导航服务开始:

public interface INavigationService
{
    bool CanGoBack { get; }
    void GoBack();
    void GoForward();
    bool Navigate<T>(object parameter = null);
    bool Navigate(Type source, object parameter = null);
    void ClearHistory();
    event EventHandler<NavigatingCancelEventArgs> Navigating;
}

public class NavigationService : INavigationService
{
    private readonly Frame _frame;

    public NavigationService(Frame frame)
    {
        _frame = frame;
        frame.Navigating += FrameNavigating;
    }

    #region INavigationService Members

    public void GoBack()
    {
        _frame.GoBack();
    }

    public void GoForward()
    {
        _frame.GoForward();
    }

    public bool Navigate<T>(object parameter = null)
    {
        Type type = typeof (T);

        return Navigate(type, parameter);
    }

那么,我在哪里获得框架?在 App.xaml.cs 中

protected async override void OnLaunched(LaunchActivatedEventArgs args)
{
    // Do not repeat app initialization when already running, just ensure that
    // the window is active
    if (args.PreviousExecutionState == ApplicationExecutionState.Running)
    {
        Window.Current.Activate();
        return;
    }

    // Create a Frame to act as the navigation context and navigate to the first page
    var rootFrame = new Frame();
    if (DesignMode.DesignModeEnabled)
        SimpleIoc.Default.Register<INavigationService, DesignTimeNavigationService>();
    else
        SimpleIoc.Default.Register<INavigationService>(() => new NavigationService(rootFrame));

我在这里使用 MVVM Light。这让生活变得轻松,因为我所有的视图模型都是使用依赖注入创建的,并将它们的服务注入其中。

如果您不使用 MVVM Light 之类的东西并依赖代码隐藏,那么您仍然可以完成这项工作:只需将导航服务设为静态即可

  public class NavigationService : INavigationService
    {
        public static INavigationService Current{
get;set;}

blah blah blah
}

并将 App.xaml.cs 更改为:

    protected async override void OnLaunched(LaunchActivatedEventArgs args)
    {
        // Do not repeat app initialization when already running, just ensure that
        // the window is active
        if (args.PreviousExecutionState == ApplicationExecutionState.Running)
        {
            Window.Current.Activate();
            return;
        }

        // Create a Frame to act as the navigation context and navigate to the first page
        var rootFrame = new Frame();
        NavigationService.Current= new NavigationService(rootFrame));
}

然后,您可以通过说:

NavigationService.Current.Navigate<MyView>();
于 2012-10-14T14:01:19.180 回答