Window、Page与Frame
一、Window
1.模态窗口与非模态窗口

2.Window类
属性 | 说 明 |
---|---|
Title | 获取或设置窗口的标题。 |
lcon | 设获取或设置窗口的图标。 |
WindowStartupLocation | 获取或设置窗口首次显示时的位置。 |
WindowState | 获取或设置一个值,该值指示窗口是处于还原、最小化还是最大化状态。 |
WindowStyle | 获取或设置窗口的样式 |
方法 | 说 明 |
Activate() | 将窗口激活并将其带到前台 |
Close() | 关闭窗口 |
ShowDialog() | 显示窗口并等待窗口关闭后才返回(模态) |
Show() | 显示窗口并返回(非模态) |
Hide() | 隐藏窗口 |
3.示例
csharp
private void buttonMT_Click(object sender, RoutedEventArgs e)
{
Window1 window = new Window1();
window.ShowDialog();
}
private void buttonFMT_Click(object sender, RoutedEventArgs e)
{
Window1 window = new Window1();
//设置父窗口,父窗口关闭时,子窗口一起关闭
window.Owner = this;
// 计算模态窗口的位置,以显示器左上角为起点,左,上,右,下
double left = Left + (Width - window.Width) / 2;
double top = Top + (Height - window.Height) / 2;
// 设置模态窗口的位置
window.Left = left;
window.Top = top;
//改成 w.Show(); 可测试非模态窗口
window.Show();
}
xml
<Grid>
<Button x:Name="buttonMT" Content="模态窗口" HorizontalAlignment="Left" Margin="111,107,0,0" VerticalAlignment="Top" Height="94" Width="189" Click="buttonMT_Click"/>
<Button x:Name="buttonFMT" Content="非模态窗口" HorizontalAlignment="Left" Margin="481,107,0,0" VerticalAlignment="Top" Height="94" Width="189" Click="buttonFMT_Click"/>
</Grid>

二、Page
1.概述
Page类 表示可导航的页面,一般和 Frame 或 NavigationWindow 搭配使用 。
官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.controls.page?view=netframework-4.8
2.Page类
Page类的部分属性如下:
三、Frame
1.概述
Frame类 是一种支持导航页面的内容控件,内部可以显示Page。
官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.controls.frame?view=netframework-4.8
2.Frame类
Frame类的部分属性如下:
3.示例
csharp
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
frame.Content = new Page1();
}
//Navigate有四种重载方式,此处演示两种
private void button2_Click(object sender, RoutedEventArgs e)
{
frame.Navigate(new Uri("Page2.xaml",UriKind.RelativeOrAbsolute));
}
private void button3_Click(object sender, RoutedEventArgs e)
{
frame.Navigate(new Page3());
}
private void buttonForword_Click(object sender, RoutedEventArgs e)
{
if (frame.CanGoForward)
{
frame.GoForward();
}
}
private void buttonBack_Click(object sender, RoutedEventArgs e)
{
if (frame.CanGoBack)
{
frame.GoBack();
}
}
}
xml
<Grid>
<Frame x:Name="frame" Background="LightGray" Width="600" Height="300" Content="" Margin="100,10,100,125"/>
<Button x:Name="buttonForword" Content="返回" HorizontalAlignment="Left" Margin="100,337,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.288,0.263" Height="26" Width="71" Click="buttonForword_Click"/>
<Button x:Name="buttonBack" Content="翻页" HorizontalAlignment="Left" Margin="629,337,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.288,0.263" Height="26" Width="71" Click="buttonBack_Click"/>
<Button x:Name="button1" Content="1" HorizontalAlignment="Left" Margin="312,337,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.288,0.263" Height="26" Width="38" Click="button1_Click"/>
<Button x:Name="button2" Content="2" HorizontalAlignment="Center" Margin="0,337,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.288,0.263" Height="26" Width="38" Click="button2_Click"/>
<Button x:Name="button3" Content="3" HorizontalAlignment="Left" Margin="451,337,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.288,0.263" Height="26" Width="38" Click="button3_Click"/>
</Grid>
四、ViewBox
1. 概述
ViewBox类,可以拉伸或缩放控件,使用这个控件使界面随屏幕尺寸变化而自动缩放。
官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.controls.viewbox?view=netframework-4.8

2. 详解
ViewBox类的部分属性如下所示
3. 示例

总结
- ShowDialog() 显示窗口并等待窗口关闭后才返回(模态),Show() 显示窗口并返回(非模态)
- ViewBox可使控件内的子控件同步拉伸放大或缩小