从MainWindow访问Frame对象以进行导航

时间:2014-12-18 14:51:40

标签: c# .net wpf xaml navigation

我正在构建一个应用程序,我必须在几页之间导航。这是我试图设置它的方式。我希望此导航通过我在页面上的按钮工作,而不在顶部显示左/右箭头导航按钮。我的主窗口设置如下所示,我所拥有的是DockPanel中的Frame

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <DockPanel>
        <Frame x:Name="_mainFrame" />
    </DockPanel>
</Window>

在这个构造函数中,我加载了我的第一页。

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            _mainFrame.Navigate(new Page1());
        }
    }

以下是我的page1的设置方式。

<Page x:Class="WpfApplication1.Page1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  mc:Ignorable="d" 
  d:DesignHeight="300" d:DesignWidth="300"
Title="Page1">

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

    <Label Grid.Row="0">This is Page 1</Label>
    <Button Grid.Row="1" Content="Next" Click="Next_Click" />

</Grid>

当用户点击“下一步”按钮时,我想转到Page2。所以我可能想要下一个按钮处理程序中的如下内容。

private void Next_Click(object sender, RoutedEventArgs e)
{
   _mainFrame.Navigate(new Page2());
}

我不知道如何引用这个!mainFrame对象。你能建议任何更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可能想尝试将StartupUri放在主窗口中以获取默认页面。

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        StartupUri="Page1.xaml">
    <DockPanel>
        <Frame x:Name="_mainFrame" />
    </DockPanel>
</Window>

然后在你的Page1.xaml内添加以下NavigationUri以进入下一页/上一页。

<Page x:Class="WpfApplication1.Page1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  mc:Ignorable="d" 
  d:DesignHeight="300" d:DesignWidth="300"
Title="Page1">

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

    <Label Grid.Row="0">This is Page 1</Label>
    <!-- this should replace your button navigation -->
    <Hyperlink NavigateUri="Page2.xaml">
       Navigate to Another Page
    </Hyperlink>

</Grid>

超链接将自动查找父级或间接父级以查找导航主机(框架)。