WPF全屏

使用扩展类的方式设置全屏
扩展类代码:

public static class FullScreenHelper
{
    private static Window _fullWindow;
    private static WindowState _windowState;
    private static WindowStyle _windowStyle;
    private static bool _windowTopMost;
    private static ResizeMode _windowResizeMode;
    private static Rect _windowRect;

    /// <summary>
    /// 进入全屏    
    /// </summary>
    /// <param name="window"></param>
    public static void GoFullscreen(this Window window)
    {
        //已经是全屏 
        if (window.IsFullscreen()) return;

        //存储窗体信息       
        _windowState = window.WindowState;
        _windowStyle = window.WindowStyle;
        _windowTopMost = window.Topmost;
        _windowResizeMode = window.ResizeMode;
        _windowRect.X = window.Left;
        _windowRect.Y = window.Top;
        _windowRect.Width = window.Width;
        _windowRect.Height = window.Height;


        //变成无边窗体 
        window.WindowState = WindowState.Normal;//假如已经是Maximized,就不能进入全屏,所以这里先调整状态 
        window.WindowStyle = WindowStyle.None;
        window.ResizeMode = ResizeMode.NoResize;
        window.Topmost = true;//最大化后总是在最上面 

        //获取窗口句柄 
        var handle = new WindowInteropHelper(window).Handle;
        //获取当前显示器屏幕
        Screen screen = Screen.FromHandle(handle);

        //调整窗口最大化,全屏的关键代码就是下面3句 
        window.MaxWidth = screen.Bounds.Width;
        window.MaxHeight = screen.Bounds.Height;
        window.WindowState = WindowState.Maximized;

        //解决切换应用程序的问题
        window.Activated += new EventHandler(window_Activated);
        window.Deactivated += new EventHandler(window_Deactivated);
        //记住成功最大化的窗体 
        _fullWindow = window;
    }

    static void window_Deactivated(object sender, EventArgs e)
    {
        var window = sender as Window;
        window.Topmost = false;
    }
    static void window_Activated(object sender, EventArgs e)
    {
        var window = sender as Window;
        window.Topmost = true;
    }

    /// <summary>
    /// 退出全屏
    /// </summary>
    /// <param name="window"></param>
    public static void ExitFullscreen(this Window window)
    {
        //已经不是全屏无操作 
        if (!window.IsFullscreen()) return;
        //恢复窗口先前信息,这样就退出了全屏 
        window.Topmost = _windowTopMost;
        window.WindowStyle = _windowStyle;
        window.ResizeMode = ResizeMode.CanResize;//设置为可调整窗体大小 
        window.Left = _windowRect.Left;
        window.Width = _windowRect.Width;
        window.Top = _windowRect.Top;
        window.Height = _windowRect.Height;
        window.WindowState = _windowState;//恢复窗口状态信息 
        window.ResizeMode = _windowResizeMode;//恢复窗口可调整信息 
                                              //移除不需要的事件 
        window.Activated -= window_Activated;
        window.Deactivated -= window_Deactivated;
        _fullWindow = null;
    }

    /// <summary>
    /// 窗体是否在全屏状态
    /// </summary>
    /// <param name="window"></param>
    /// <returns></returns>
    public static bool IsFullscreen(this Window window)
    {
        if (window == null)
            throw new ArgumentNullException("window");
        return _fullWindow == window;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值