设置WPF窗体全屏显示

设置WPF窗体全屏显示:

private void Window_Loaded(object sender, RoutedEventArgs e)

{
    // 设置全屏
    this.WindowState = System.Windows.WindowState.Normal;
    this.WindowStyle = System.Windows.WindowStyle.None;
    this.ResizeMode = System.Windows.ResizeMode.NoResize;
    this.Topmost = true;

    this.Left = 0.0;
    this.Top = 0.0;
    this.Width = System.Windows.SystemParameters.PrimaryScreenWidth;
    this.Height = System.Windows.SystemParameters.PrimaryScreenHeight;
}

扩展类:

项目先引用下面dll:

1:System.Windows.Forms; 2:System.Drawing;

public static class ExpendMethod
    {
        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;
        }
    }
Windows Forms (WinForms) 应用程序中嵌入 WPF 窗体需要一些额外步骤,因为WinForms和WPF是两个独立的框架。以下是一个简单的步骤说明: 1. **添加引用**:首先,在WinForms项目中右键单击“References”,然后选择“Add Reference”。在弹出的对话框里,找到并勾选“PresentationFramework”(如果它不在可用的列表里,可能需要安装.net Framework 4.5 或更高版本)。 2. **创建WPF窗体**:在WinForms项目中新建一个WPF窗体,例如命名为`WpfForm.xaml.cs`。这将生成一个WPF窗体文件和对应的后台代码。 3. **加载WPF窗体**:在WinForms上添加一个用户控件或者通过其他方式(如Panel或Window)来承载WPF窗体。例如,你可以使用`InteropServices`库中的`CreateObject`函数动态创建一个WPF窗口实例: ```csharp using System.Windows.Forms; using System.Runtime.InteropServices; private void ShowWpfFormButton_Click(object sender, EventArgs e) { // 调整WPF窗体的构造函数以接受适当的参数,如果有的话 string wpfWindowName = "YourWpfFormName"; object wpfInstance = Activator.CreateInstance(Type.GetTypeFromProgID($"WPFNamespace.{wpfWindowName}")); using (var window = new WindowInteropHelper(wpfInstance as Window)) { window.Show(); } } ``` 4. **处理窗体关闭事件**:记得在WPF窗体中处理Closing事件,以便在用户关闭时正确地关闭嵌入的WPF窗体。 注意:这种方法不是推荐的最佳实践,因为它涉及到COM interop,可能会导致性能和兼容性问题。通常更推荐的是使用Xceed或其他第三方控件(如Prism)来实现跨框架通信,或者考虑直接重构成统一的UI框架(如使用UWP或WPF)。如果你只是临时需要嵌套展示,可以考虑使用第三方库简化过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BeanGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值