WPF 全屏显示实现(无标题栏按钮 + 自定义退出按钮)

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才能自定义大小
}

注意事项

  1. 窗口样式WindowStyle="None" 会移除所有窗口装饰,包括标题栏和边框
  2. 调整大小ResizeMode="NoResize" 防止用户调整窗口大小
  3. 任务栏:全屏窗口默认会覆盖任务栏,如需显示任务栏,请调整窗口大小
  4. 快捷键:添加ESC键退出功能可以提升用户体验
  5. 性能:全屏应用通常需要优化渲染性能,特别是包含动画或视频时
相关推荐
dotent·1 天前
C#基于WPF UI框架的通用基础上位机测试WPF框架
ui·c#·wpf
咩图2 天前
WPF+Prism8.0.0.1909+C#创建一个桌面程序
c#·wpf·prism
雁于飞2 天前
分布式基础
java·spring boot·分布式·spring·wpf·cloud native
oioihoii3 天前
WPF入门指南:解析默认项目结构
wpf
极客智造3 天前
深入解析 ReactiveUI:WPF 响应式 MVVM 开发的 “终极方案”
wpf
Macbethad4 天前
使用WPF编写一个多维度伺服系统的程序
大数据·hadoop·wpf
lingxiao168885 天前
WPF Prism框架应用
c#·wpf·prism
Macbethad5 天前
使用WPF编写一个Ethercat主站的程序
wpf
难搞靓仔5 天前
WPF 弹出窗体Popup
wpf·popup
Macbethad5 天前
使用WPF编写一个MODBUSTCP通信的程序
wpf