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. 性能:全屏应用通常需要优化渲染性能,特别是包含动画或视频时
相关推荐
keke104 小时前
WPF【11_3】WPF实战-重构与美化(可复用的UI组件)
ui·重构·wpf
TwilightLemon8 小时前
WPF 使用GDI+提取图片主色调并生成Mica材质特效背景
wpf
Serenus0219 小时前
WPF事件处理器+x名称空间
wpf
keke1019 小时前
WPF【11_4】WPF实战-重构与美化(MVVM 架构)
重构·架构·wpf
keke1021 小时前
WPF【11_5】WPF实战-重构与美化(MVVM 实战)
重构·c#·wpf
keke1021 小时前
WPF【11_7】WPF实战-重构与美化(ViewModel的嵌套与分解、海量数据不要Join)
重构·wpf
keke1021 小时前
WPF【11_9】WPF实战-重构与美化(UI 与视图模型的联动,实现INotifyPropertyChanged)-示例
ui·重构·wpf
猫头虎1 天前
什么是 WPF 技术?什么是 WPF 样式?下载、安装、配置、基本语法简介教程
驱动开发·fpga开发·硬件架构·wpf·硬件工程·dsp开发·材料工程
keke101 天前
WPF【11_1】WPF实战-重构与美化(Entity Framework)
oracle·重构·wpf
飞人博尔特的摄影师1 天前
5分钟入门WPF和FluentValidation数据验证
经验分享·系统架构·c#·.net·wpf·.netcore