我有一个我创建的主窗口,它看起来像通常的登录屏幕。
一旦用户点击按钮,我希望整个窗口都能改变。
在所有的例子中,我看到我必须保留一个堆叠面板/底座,然后只有框架会发生变化。
例如,我有以下主窗口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();
}
在这种情况下,两个视图显示在同一页面上,而不是完全切换。
我不是这样想的。我需要整个窗口进行更改,而不是留下一个堆栈面板。
任何简单的例子都会受到赞赏。
答案 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 你应该了解这一点。也许不是现在,但很快。