WPF窗口的样式=无盖任务栏应用程序时初始化之后最大化(WPF Window with Style=

2019-07-19 03:25发布

我想实现如Windows Media Player或基于浏览器的Flash播放器最大化时占据整个(甚至没有任务栏是可见的),房地产业同样的效果。

如果这工作正常WindowState设置为MaximizedWindowStyle设置为None ,因此该应用在该国开始在XAML。 问题是,我想启动应用程序的窗口边界,当用户选择,最大限度地为上述规定。 在StateChanged处理我检查Maximized状态,如果是这样的话我设置WindowStyleNone 。 这有最大化的窗口,但没有覆盖任务栏的效果。 下面的代码将完成这项工作,因为我想但其背,我想清理:

if (WindowState == WindowState.Maximized)
{
    m_videoWindow.Maximize();

    WindowStyle = WindowStyle.None;

    //the following makes this work but I would like to clean it up
    Hide();
    Show();
}

编辑 这 (从2006年时仍处于CTP)中提到的问题,并从MS有人指出,他们希望提高在下一版本中全屏支持下,这些改进好了吗?

Answer 1:

这篇文章解释了这一切: 最大化窗口(与WindowStyle =无)考虑到任务栏 。

:也值得一试, 在WPF自定义窗口镶边 。

编辑 :现在,新的,是WPF外壳集成库,使窗口镶边的完整restyle没有重新实现移动的头痛,调整大小等

编辑2015年 :壳牌集成库现在集成在WPF和MS退役代码



Answer 2:

我发现我可以最大化为全屏通过创建窗口(XAML)时设置的属性(包括任务栏),但无法创建后来回切换。 一些试验后,我发现属性的设置顺序似乎无关紧要:

public bool IsFullscreen
{
    get 
    {
        return WindowState == System.Windows.WindowState.Maximized
            && ResizeMode == System.Windows.ResizeMode.NoResize
            && WindowStyle== System.Windows.WindowStyle.None;
    }
    set
    {
        if ( value )
        {
            ResizeMode = System.Windows.ResizeMode.NoResize;
            WindowStyle = System.Windows.WindowStyle.None;
            WindowState = System.Windows.WindowState.Maximized;
        }
        else
        {
            ResizeMode = System.Windows.ResizeMode.CanResize;
            WindowStyle = System.Windows.WindowStyle.SingleBorderWindow;
            WindowState = System.Windows.WindowState.Normal;            
        }
    }
}

需要注意的是在的WindowState二传手最后



Answer 3:

为了得到这个在我的WPF / .NET 4.0的应用程序正常工作,我调用这个函数,每当我进入或退出全屏模式:

private static void RefreshWindowVisibility(Window window)
        {
            if (window.OriginalWindowState == WindowState.Maximized)
            {
                window.Hide();
                window.Show();
                window.BringIntoView();
            }
        }

没有与此相关的方法闪烁,但它似乎要在Chrome全屏模式时存在相同的闪烁。 Internet Explorer中似乎采取了不同的方法。



Answer 4:

我不知道这是确定你,但你可以改变窗口大小有比工作区域相同的尺寸(即,在大多数情况下,除了在任务栏上所有的屏幕),并在0,0找到它(左上角):

Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width; 
Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height; 
Left = 0; 
Top = 0;

对于WorkingArea属性(从MSDN)的确切定义是:

获取显示器的工作区域。 工作区是显示器的桌面面积,不包括任务栏,停靠窗口,并停靠工具栏。

希望能帮助到你



文章来源: WPF Window with Style=None cover taskbar when Maximised after app initialization