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. 性能:全屏应用通常需要优化渲染性能,特别是包含动画或视频时
相关推荐
军训猫猫头9 小时前
5.浏览本地文件获取路径与文件名称 C#例子 WPF例子
开发语言·c#·wpf
步、步、为营17 小时前
.NET + WPF框架开发聊天、网盘、信息发布、视频播放功能
.net·wpf·音视频
code bean1 天前
【WPF实战】MVVM中如何从数据模型反查自定义控件实例(ImageView + Halcon)
wpf
lph19721 天前
ValueConverter转换器WPF
wpf
Sally璐璐1 天前
Memcache核心技术解析与实战应用
运维·wpf·memcached
悟能不能悟2 天前
Dubbo跨越分布式事务的最终一致性陷阱
分布式·wpf·dubbo
I'mSQL2 天前
C#与FX5U进行Socket通信
运维·服务器·自动化·wpf
观无3 天前
关于wpf的自适应
wpf
时光追逐者3 天前
一款开源免费、通用的 WPF 主题控件包
开源·c#·.net·wpf
甜甜不吃芥末4 天前
Windows 应用程序的 UI 框架:WPF、WinUI 3 和 UWP的差异区别
windows·ui·wpf