WPF全屏幕窗口创建方法介绍
创始人
2024-06-17 23:00:46
0

WPF全屏幕窗口在实际使用中是一个比较常见的应用方法。如何才能快速简单的实现这一功能,是一个初级开发人员必须掌握的技巧。#t#

WPF中用XAML创建WPF全屏幕窗口非常简单,只需要简单地设置Window元素的一些属性即可:

 

  1. < Window x:Class=
    "WindowsApp.Window1" 
  2. xmlns="http://schemas.
    microsoft.com/winfx/2006/
    xaml/presentation"
     
  3. xmlns:x="http://schemas.
    microsoft.com/winfx/2006/xaml"
     
  4. WindowState="Maximized" 
  5. Topmost="True"   
  6. WindowStyle="None" 
  7. AllowsTransparency="true" 
  8. > 
  9. < Grid> 
  10. < !--忽略建立动画的代码-->   
  11. < /Grid> 
  12. < /Window> 

 

 

最后程序的运行结果却出乎所料,在调用Storyboard.Begin之前,一切都很正常,但是一旦启动动画,程序运行及很慢,鼠标的运动很慢很慢。有兴趣的朋友可以自己尝试一下。

 

如果把窗口Style稍微修改,问题就得到了解决,把WindowStyle的None修改为其它的值似乎都可以正常运行。动画的效率得到了极大的提高。

 

但是我们要的就是WPF全屏幕窗口,那怎么办呢?时间比较紧急,咱就曲线救国绕过去吧!在XAML的Window属性中WindowStyle保留其默认值,在窗口的加载响应函数里直接用了Win32 API函数来修改窗口的Style。现在可以几乎可以肯定这不像是正统的方法,或者还有其它的还没有了解的知识。修改后的代码如下:

 

 

  1. < Window x:Class="WindowsApp.
    Window1" 
  2. xmlns="http://schemas.
    microsoft.com/winfx/2006/
    xaml/presentation" 
  3. xmlns:x="http://schemas.
    microsoft.com/winfx/2006/xaml" 
  4. WindowState="Maximized" 
  5. Topmost="True"   
  6. Loaded="OnMainLoad" 
  7. < Grid> 
  8. < !--忽略建立动画的代码-->   
  9. < /Grid> 
  10. < /Window> 
  11. private void OnMainLoad
    (object sender, Routed
    EventArgs e)  
  12. {  
  13. int nStyle = Win32API.
    GetWindowLong(new WindowInterop
    Helper(this).Handle;,Win32API.
    GWL_STYLE);  
  14. nStyle &= ~Win32API.WS_CAPTION;  
  15. Win32API.SetWindowLong
    (new WindowInteropHelper(this).
    Handle;, Win32API.GWL_STYLE, nStyle);  
  16. }  
  17. public class Win32API  
  18. {  
  19. [DllImport("user32.dll")]  
  20. public static extern int 
    SetWindowLong(IntPtr hWnd, 
    int nIndex, int New);  
  21. [DllImport("user32.dll")]  
  22. public static extern int 
    GetWindowLong(IntPtr hWnd, 
    int nIndex);   
  23. }  
  24. public const int GWL_STYLE = -16;  
  25. public const int GWL_EXSTYLE = -20;   
  26. public const int WS_CAPTION = 
    0x00C00000; 

 

 

WPF全屏幕窗口的创建代码中使用的WindowInteropHelper类将在后续的随笔中介绍。至于用C#调用Win32 API函数应该不需要进一步的介绍,不熟悉C#的朋友可以参考MSDN中的Interoperability相关内容

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...