WPF 全屏显示实现(无标题栏按钮 + 自定义退出按钮)
完整实现代码
MainWindow.xaml
xml
<Window x:Class="FullScreenApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="全屏应用" WindowState="Maximized" WindowStyle="None"
ResizeMode="NoResize" Background="Black">
<Grid>
<!-- 主内容区域 -->
<TextBlock Text="全屏应用演示"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="White" FontSize="36"/>
<!-- 自定义退出按钮 -->
<Button x:Name="ExitButton"
Content="退出程序"
Width="100" Height="40"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Margin="20"
Click="ExitButton_Click"/>
</Grid>
</Window>
MainWindow.xaml.cs
csharp
using System.Windows;
namespace FullScreenApp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// 确保窗口全屏
this.WindowState = WindowState.Maximized;
this.WindowStyle = WindowStyle.None;
// 可选:防止其他窗口覆盖
this.Topmost = true;
}
private void ExitButton_Click(object sender, RoutedEventArgs e)
{
// 退出应用程序
Application.Current.Shutdown();
}
// 可选:响应ESC键退出
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Key == Key.Escape)
{
Application.Current.Shutdown();
}
base.OnKeyDown(e);
}
}
}
进阶功能
1. 添加淡入淡出动画效果
xml
<Window.Resources>
<Storyboard x:Key="FadeOut">
<DoubleAnimation Storyboard.TargetProperty="Opacity"
From="1" To="0" Duration="0:0:0.3"/>
</Storyboard>
</Window.Resources>
然后在退出按钮点击事件中:
csharp
private async void ExitButton_Click(object sender, RoutedEventArgs e)
{
var storyboard = (Storyboard)FindResource("FadeOut");
storyboard.Begin(this);
await Task.Delay(300); // 等待动画完成
Application.Current.Shutdown();
}
2. 防止误操作退出(添加确认对话框)
csharp
private void ExitButton_Click(object sender, RoutedEventArgs e)
{
var result = MessageBox.Show("确定要退出程序吗?", "确认退出",
MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{
Application.Current.Shutdown();
}
}
3. 多显示器支持(在主显示器全屏)
csharp
public MainWindow()
{
InitializeComponent();
// 获取主显示器信息
var screen = System.Windows.Forms.Screen.PrimaryScreen;
// 设置窗口位置和大小
this.Left = screen.Bounds.Left;
this.Top = screen.Bounds.Top;
this.Width = screen.Bounds.Width;
this.Height = screen.Bounds.Height;
this.WindowStyle = WindowStyle.None;
this.WindowState = WindowState.Normal; // 必须设置为Normal才能自定义大小
}
注意事项
- 窗口样式 :
WindowStyle="None"
会移除所有窗口装饰,包括标题栏和边框 - 调整大小 :
ResizeMode="NoResize"
防止用户调整窗口大小 - 任务栏:全屏窗口默认会覆盖任务栏,如需显示任务栏,请调整窗口大小
- 快捷键:添加ESC键退出功能可以提升用户体验
- 性能:全屏应用通常需要优化渲染性能,特别是包含动画或视频时