XAML 浏览我的窗口只显示下一页的名称,而不是它的内容

j5fpnvbx  于 2023-05-27  发布在  其他
关注(0)|答案(1)|浏览(131)

希望你们都好。我遇到了一个WPF XAML问题,我的页面无法导航,经过一段时间的研究,我似乎仍然无法解决这个问题。基本上,我有我的主窗口页面,其中有一个按钮事件,使用框架将页面内容更改为新页面的内容(“OrdersPage.xaml”)
我写的MainWindow XAML是这样的:

<Controls:MetroWindow x:Class="DatabaseTest.MainWindow"
        xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
        xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
WindowTitleBrush="Gray" GlowBrush="Black"
        WindowStartupLocation="CenterScreen"
        mc:Ignorable="d">
    <Grid Background="#312F2F">
        <Frame x:Name="mainFrame"/>
...

我的订单页面看起来像这样:

<Controls:MetroWindow x:Class="DatabaseTest.OrdersPage"
        xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DatabaseTest"
        mc:Ignorable="d"
        Title="OrdersPage" Height="450" Width="800">
    <Grid>
        <TextBlock Text="Hello"></TextBlock>
    </Grid>
...

在这个类后面的C#中,有一个方法处理按钮按下,看起来像这样:

public partial class MainWindow
    {
                 public static NavigationService NavigationService => ((MainWindow)Application.Current.MainWindow).mainFrame.NavigationService;

...

        private void SendCustomerBtn_Click(object sender, RoutedEventArgs e)
        {
            if(parseCustomer is not null)
            {
                MainWindow.NavigationService.Navigate("OrdersPage.xaml");
            }
        }

从我写的和阅读过的其他文章,我相信这是写正确的,但是当我运行我的程序,点击按钮,它显示在左上角,“OrdersPage.xaml”作为一个小的黑色文本。(图片在这里):
Image of navigation
我真的很困惑为什么会发生这种情况,并希望得到任何帮助。

lh80um4z

lh80um4z1#

我注意到MainWindowOrdersPage都实现了MetroWindow,现在尝试将OrdersPage更改为标准的Page
然后,尝试在代码隐藏中示例化一个新的OrdersPage对象,如下所示:

private void SendCustomerBtn_Click(object sender, RoutedEventArgs e)
{
    if(parseCustomer == default) return;
    //here, it may be smart to pass parseCustomer as a parameter?
    OrdersPage ordersPage = new();
    MainWindow.NavigationService.Navigate(ordersPage);
}

这使您能够提供构造函数参数(WPF需要一个无参数的构造函数,但您可以用任何您想要的东西重载它),并且仍然为您提供使用NavigationService的所有好处,例如GoBack()等。

相关问题