如何在我的 wpf 主窗口中更改页面?

Posted

技术标签:

【中文标题】如何在我的 wpf 主窗口中更改页面?【英文标题】:How can i change a Page in my wpf Main Window? 【发布时间】:2021-12-10 00:23:16 【问题描述】:

我想切换托管在我的主窗口上的页面。第一页(在 App Start 处)正在正确显示。但是,如果我想更改页面,它不会发生。我什至没有收到错误。它只显示第一页!这是我的代码:

MainWindow的构造函数:

public MainWindow(SchraubUser _schraubUser, string page = "")
    
        schraubUser = _schraubUser;
        db = new AccessDatabase(schraubUser._DATABASE_PATH);

        ViewModel.ViewModel wzViewModel = new ViewModel.ViewModel(schraubUser, db);

        InitializeComponent();

        if (page == "")
        
            Main.Content = new View.Werkzeug_Window(wzViewModel);
        
        else
        
            Main.Content = new View.Freigaben(wzViewModel); 
        
    

在应用程序启动时,可选变量是“”,因此主窗口将显示 View.Werkzeug_Window(正常工作)。

这是更改页面的代码:

    private void Button_Freigaben_Click(object sender, RoutedEventArgs e)
    
        mainWindow = new MainWindow(sb_vm.schraubUser, "Freigabe");
    

但它仍会显示第一页。这是为什么呢?

主窗口的 XAML:

<Window x:Class="SchrauberDB.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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:SchrauberDB"
    mc:Ignorable="d" 
    Title="MainWindow" Height="750" Width="1100"
    WindowState="Maximized">
<Grid x:Name="mainGrid">
    <Frame x:Name="Main" />
</Grid>
</Window>

【问题讨论】:

您不想使用相框吗?也许在 Click 事件处理程序中将 Frame.Content 属性设置为新页面?就像你在大蟒蛇做的那样?这就是为什么它适用于启动时的第一页? 【参考方案1】:

这太尴尬了……

    private void Button_Freigaben_Click(object sender, RoutedEventArgs e)
    
        mainWindow = new MainWindow(sb_vm.schraubUser, "Freigabe");
        mainWindow.Show();
    

【讨论】:

但是这个解决方案只会打开一个新窗口,而旧窗口仍然是可见的......我如何在 mainWindow 保持不变的情况下更改页面而不打开新窗口?

以上是关于如何在我的 wpf 主窗口中更改页面?的主要内容,如果未能解决你的问题,请参考以下文章

wpf中用户控件更改期间的动画

如何制作“全局”wpf 应用程序热键

WPF 如何把子窗口放到主窗口的Panel中?

如何在我的“Metro Style”应用程序中的 WPF 中进行拖放?

如何关闭 WPF 中隐藏的主窗口?

WPF中如何实现将一个窗口的对象关联到另一个窗口?