当有多台显示设备,比如有两台显示器时,让WPF窗体在不同显示器上呈现不同内容就显得尤为必要。同时让窗口全屏显示也能取得较好的呈现效果。
一般来讲WPF项目默认都是从MainWindow开始启动的。多屏显示的思路很简单,就是遍历当前所有硬件显示设备,然后实例化不同的窗体并分别设置其位置在不同的显示设备上。
遍历显示设备
public MainWindow(string sysName, int timeState)
{
InitializeComponent();
//查找当前屏幕数量
if (System.Windows.Forms.Screen.AllScreens.Count() >= 2)
{
Dispatcher.Invoke(
() =>
{
try
{
NewWindow win= new NewWindow();
win.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
);
}
}
窗口实例化
public NewWindow()
{
InitializeComponent();
foreach (Screen scr in Screen.AllScreens)
{
if (!scr.Primary)
{
//设置窗体位置
WindowStartupLocation = WindowStartupLocation.Manual;
Left = scr.WorkingArea.Left;
Top = scr.WorkingArea.Top;
Width = scr.Bounds.Width;
Height = scr.Bounds.Height;
Topmost = true;
WindowState = WindowState.Maximized;
ResizeMode = ResizeMode.NoResize;
WindowStyle = WindowStyle.None;
WindowState = WindowState.Normal;
ShowInTaskbar = false;
break;
}
}
}
窗体全屏
<Controls:MetroWindow x:Class="WPFDemo.Metro.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:local="clr-namespace:WPFDemo.Metro"
Title="MainWindow" Height="480" Width="800"
WindowState="Maximized"
WindowStyle="None"
Topmost="True"
ShowInTaskbar="False"
ResizeMode="NoResize">
关键点在于以下几个属性的设置:
属性名称 | 意义 |
---|---|
WindowState | 窗口状态(最大化/最小化/普通) |
WindowStyle | 窗口样式(无边框/带工具栏/仅含关闭按钮/包含最大化、最小化、关闭按钮) |
Topmost | 是否在最前面显示 |
ShowInTaskbar | 是否在任务栏显示 |
ResizeMode | 尺寸改变模式(可改变尺寸/不可改变尺寸/可最小化/可拖拽改变尺寸) |