0

我目前有一个程序,它的 Window 包含两个框架,一个位于屏幕顶部,类似于导航面板,用户可以在其中单击不同的按钮导航到程序的区域,这些区域被加载到下面的框架中。

顶部框架永久保持不变,即有按钮说Questions,例如TagsUsers不会改变。当用户单击Questions按钮时,他们应该被带到程序的相关区域,但在下面的框架内。

这样做的问题是,因为它们在顶部框架内,所以NavigationService将相关页面加载到顶部框架中,而不是在屏幕中心的主框架中。

有没有办法让一个框架内单击的按钮可以导致不同的框架通过 加载不同的页面NavigationService?这是一个油漆示例;

在此处输入图像描述

编辑:要更新这个问题,我最初计划做的是将顶部框架不在框架中,而是在其window本身中。但是因为window不继承自page,所以我不能使用NavigationService.

4

2 回答 2

0

如果要在主框架中加载相关页面,则需要使用NavigationService主框架的,您可以将顶部框架放在window本身而不放在框架中。例如:

在您的 XAML 中

<Window x:Class="WPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WPF" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Title="MainWindow" Width="525" Height="350" mc:Ignorable="d">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="80" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Button x:Name="Questions" Margin="20" Click="Questions_Click">Questions</Button>
            <Button x:Name="Tags" Grid.Column="1" Margin="20" Click="Tags_Click">Tags</Button>
            <Button x:Name="Users" Grid.Column="2" Margin="20" Click="Users_Click">Users</Button>
        </Grid>
        <Frame x:Name="MainFrame" Grid.Row="1" />
    </Grid>
</Window>

在你的代码隐藏中

private void Questions_Click(object sender, RoutedEventArgs e)
{
    //The relevant page you want to load
    QuestionsPage questionsPage = new QuestionsPage();
    MainFrame.NavigationService.Navigate(questionsPage);
    //Also you can use Frame.Navigate Method
    //MainFrame.Navigate(questionsPage);
}
于 2015-11-01T12:02:29.033 回答
0

一种在 WPF 中使用视图模型驱动的 MVVM 进行导航的方法,您可以在Bryan Anderson 的幻灯片中了解视图驱动和视图模型驱动的区别。

然后您可以切换视图模型属性实例并让它们使用不同的数据模板进行渲染。此codeproject 文章中显示了一种从代码注册数据模板的好方法。

这样导航服务将更改视图模型实例,这就是他所要做的。随着实例类型的变化,另一个数据模板被选中来呈现视图。

于 2015-10-30T08:13:56.507 回答