从自定义WPF用户控件获取帧

时间:2014-04-08 20:14:01

标签: c# user-controls windows-runtime winrt-xaml mvvm-light

我正在开发一个WinRT 8.1应用程序,我的自定义控件中有一个MenuFlyout。实质上,当用户单击MenuFlyout中的项目时,用户将导航到不同的页面。我的困境是我无法访问用户控件中的Page元素。这有什么解决方法吗?我看了许多类似的SO问题,但没有一个能为我工作。

public sealed partial class BottomAppBar : UserControl {
  public BottomAppBar() {
     this.InitializeComponent();

     //we are forced to manually add items as flyout does not support command
     foreach (Vault v in User.Instance.Vaults) {
        MenuFlyoutItem vault = new MenuFlyoutItem();
        vault.Text = v.Name;
        vault.Click += switchUser;
        flyoutVault.Items.Add(vault);
     }
  }

  private void switchUser(object sender, object e) {
     //This line results in an error
     this.Frame.Navigate(typeof(LoginPage));

     /** Does not work as well
     var parent = VisualTreeHelper.GetParent(this);
     while (!(parent is Page)) {
        parent = VisualTreeHelper.GetParent(parent);
     }
     (parent as Page).Frame.Navigate(typeof(LoginPage));
     */
  }

1 个答案:

答案 0 :(得分:0)

设计模式的解决方案是创建一个将应用程序框架传递给它的导航服务,然后使用依赖注入之类的东西将导航服务传递给任何可能需要它的人。

简单的解决方案是在App类中存储对Frame的引用,并通过app对象/ static属性访问它。