我想实现如Windows Media Player或基于浏览器的Flash播放器最大化时占据整个(甚至没有任务栏是可见的),房地产业同样的效果。
如果这工作正常WindowState
设置为Maximized
和WindowStyle
设置为None
,因此该应用在该国开始在XAML。 问题是,我想启动应用程序的窗口边界,当用户选择,最大限度地为上述规定。 在StateChanged
处理我检查Maximized
状态,如果是这样的话我设置WindowStyle
到None
。 这有最大化的窗口,但没有覆盖任务栏的效果。 下面的代码将完成这项工作,因为我想但其背,我想清理:
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有人指出,他们希望提高在下一版本中全屏支持下,这些改进好了吗?
这篇文章解释了这一切: 最大化窗口(与WindowStyle =无)考虑到任务栏 。
:也值得一试, 在WPF自定义窗口镶边 。
编辑 :现在,新的,是WPF外壳集成库,使窗口镶边的完整restyle没有重新实现移动的头痛,调整大小等
编辑2015年 :壳牌集成库现在集成在WPF和MS退役代码
我发现我可以最大化为全屏通过创建窗口(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二传手最后 。
为了得到这个在我的WPF / .NET 4.0的应用程序正常工作,我调用这个函数,每当我进入或退出全屏模式:
private static void RefreshWindowVisibility(Window window)
{
if (window.OriginalWindowState == WindowState.Maximized)
{
window.Hide();
window.Show();
window.BringIntoView();
}
}
没有与此相关的方法闪烁,但它似乎要在Chrome全屏模式时存在相同的闪烁。 Internet Explorer中似乎采取了不同的方法。
我不知道这是确定你,但你可以改变窗口大小有比工作区域相同的尺寸(即,在大多数情况下,除了在任务栏上所有的屏幕),并在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