在wpf中更改整个窗口视图

时间:2018-04-14 10:16:36

标签: c# wpf xaml frame

我有一个我创建的主窗口,它看起来像通常的登录屏幕。

一旦用户点击按钮,我希望整个窗口都能改变。

在所有的例子中,我看到我必须保留一个堆叠面板/底座,然后只有框架会发生变化。

例如,我有以下主窗口xaml:

<Window x:Class="WpfApp1.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:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Frame x:Name="Main" Margin="0,35,0,0"/>
        <Button Content="Button" Click="Button_Click" Margin="0,105,326,100"/>
    </Grid>
</Window>

和新页面:

<Page x:Class="WpfApp1.Optimizer"
      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" 
      xmlns:local="clr-namespace:WpfApp1"
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"
      Title="Optimizer">
    <Grid Background="Black">
        <Button Content="Button" HorizontalAlignment="Left" Height="91" Margin="125,87,0,0" VerticalAlignment="Top" Width="129"/>
    </Grid>
</Page>

我的命令是:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Main.Content = new Optimizer();
    }

在这种情况下,两个视图显示在同一页面上,而不是完全切换。

我不是这样想的。我需要整个窗口进行更改,而不是留下一个堆栈面板。

任何简单的例子都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

首先要提到的是商业团队很少使用页面和框架。至少不符合我的经验 除非在浏览器中编写xbap - 这是wpf。

我建议您考虑用户控件而不是页面,并将它们托管在contentcontrols中 然后你可以有类似的东西:

        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Click="Button_Click"/>
    </Grid>
</Window>

点击处理程序:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        this.Content = new UserControl1();
    }

这使得mainwindow的整个内容成为UserControl1的一个实例 Window继承自contentcontrol。

您还应该在列表中学习mvvm 你应该了解这一点。也许不是现在,但很快。