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. 性能:全屏应用通常需要优化渲染性能,特别是包含动画或视频时
相关推荐
不会编程的懒洋洋14 小时前
WPF XAML+布局+控件
xml·开发语言·c#·视觉检测·wpf·机器视觉·视图
雨浓YN15 小时前
GKMLT通讯工具箱(WPF MVVM) - 06-OPCUA通讯
wpf
雨浓YN16 小时前
GKMLT通讯工具箱(WPF MVVM) - 03-西门子S7通讯
wpf
雨浓YN18 小时前
GKMLT通讯工具箱(WPF MVVM) - 05-WebAPI通讯
wpf
软泡芙2 天前
【WPF 】MVVM 设计模式在 WPF 中的实战应用
设计模式·wpf
张小俊_2 天前
WPF 跨线程 UI 更新与硬编码赋值引发的 Bug 排查
c#·bug·wpf
七夜zippoe3 天前
DolphinDB在工业物联网中的优势
物联网·wpf·工业物联网·优势·dolphindb
heimeiyingwang3 天前
【架构实战】观察者模式在分布式系统中的应用
观察者模式·架构·wpf
bugcome_com3 天前
WPF + Microsoft.ToolKit.Mvvm 技术指南与实战项目
microsoft·wpf
武藤一雄4 天前
WPF中逻辑树(Logical Tree)与可视化树(Visual Tree)到底是什么
microsoft·c#·.net·wpf·.netcore