近日的学习中遇到一个非常奇怪的问题:用XAML文件创建了一个全屏幕窗口,然后,在窗口中建立了一个非常简单的动画。一切都在我的掌控之中,实现非常的顺利。

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

<Window x:Class="WindowsApp.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

WindowState="Maximized"

Topmost="True"

WindowStyle="None"

AllowsTransparency="true"
    >

<Grid>

<!--忽略建立动画的代码-->

</Grid>

</Window>

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

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

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

<Window x:Class="WindowsApp.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

WindowState="Maximized"

Topmost="True"

Loaded="OnMainLoad"

>

<Grid>

<!--忽略建立动画的代码-->

</Grid>

</Window>

private void OnMainLoad(object sender, RoutedEventArgs e)

{

int nStyle = Win32API.GetWindowLong(new WindowInteropHelper(this).Handle;,Win32API.GWL_STYLE);

nStyle &= ~Win32API.WS_CAPTION;

Win32API.SetWindowLong(new WindowInteropHelper(this).Handle;, Win32API.GWL_STYLE, nStyle);

}

public class Win32API

{

[DllImport("user32.dll")]

public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int New);

[DllImport("user32.dll")]

public  static extern int GetWindowLong(IntPtr hWnd, int nIndex);

}

public const int GWL_STYLE = -16;

public const int GWL_EXSTYLE = -20;

public const int WS_CAPTION = 0x00C00000;

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

转载于:https://www.cnblogs.com/YilingLai/archive/2006/12/16/594107.html

WPF疑难杂症之二(全屏幕窗口)相关推荐

  1. WPF的消息机制(二)- WPF内部的5个窗口之隐藏消息窗口

    原文:WPF的消息机制(二)- WPF内部的5个窗口之隐藏消息窗口 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/powertoolsteam/ar ...

  2. WPF实用指南二:移除窗体的图标

    原文:WPF实用指南二:移除窗体的图标 WPF没有提供任何功能来移除窗体上的icon图标.一般的做法是设置一个空白的图标,如下图1: 这种做法在窗体边框与标题之间仍然会保留一片空白. 比较好的做法是使 ...

  3. WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口...

    目录 WPF的消息机制(一)-让应用程序动起来 WPF的消息机制(二)-WPF内部的5个窗口 (1)隐藏消息窗口 (2)处理激活和关闭的消息窗口和系统资源通知窗口 (3)用于用户交互的可见窗口 (4) ...

  4. WPF模板(二)应用

    原文:WPF模板(二)应用 本次内容来源于电子书,和上一篇一样. 在WPF中有三大模板ControlTemplate,ItemsPanelTemplate,DataTemplate.其中Control ...

  5. Windows消息机制学习笔记(二)—— 窗口与线程

    Windows消息机制学习笔记(二)-- 窗口与线程 要点回顾 消息从哪里来? 实验一:Spy++捕获消息 实验二:消息捕获 消息到哪里去? 窗口在哪? 实验:分析CreateWindowExW 窗口 ...

  6. [WPF]winfom中ShowWPF新窗口时TextBox等控件无法输入问题解决方法 .

    项目使用ElementHost方式加载WPF,刚才直接在WPF中使用Show,而不是ShowDialog新开窗口时,窗口中的控件无法输入,但可以直接粘贴. 原来是因为WinForm与WPF实现Inpu ...

  7. wpf中的点击窗口放大放小按钮怎么写_Python tkinter教程01:创建窗口

    往期回顾 我想问下,你为什么看这里?这是第一期 文章目录 0 准备工作 1 创建空白窗体 2 窗口标题 3 窗口大小与位置 4 锁定窗口大小 5 窗口图标 6 隐藏与显示窗口 其它 0 准备工作 要使 ...

  8. wpf 如何设置弹出窗口必须关闭才能打开其他软件_CAD如何打印才能不留白?原来打印图纸还有这么多技巧?...

    我们绘制完图纸之后都会将图纸打印出来,不过在打印的时候,是不是经常会发现,打印出来的图纸中是有一部分留白,强迫症简直无法接受哇!那么有什么办法能够让我们打印出来的图纸更加美观一些呢?其实很简单!今天小 ...

  9. wpf 如何设置弹出窗口必须关闭才能打开其他软件_Mac忘记登录密码?以防万一,必须收藏。...

    忘记mac登录密码这个问题如何解决呢?这得看你的Mac有没有开启FileVault,这里先简单介绍一下FileVault.FileVault是苹果系统的一项保密措施,一般刚买的Mac开机时会让你设置是 ...

最新文章

  1. HDLBits 系列(35)Lemmings Game
  2. 哈哈,netbeans5.5的Visual Web Pack终于出来了
  3. 23种设计模式C++源码与UML实现--工厂模式
  4. Maven学习之 仓库镜像
  5. AI「抄」代码无罪?GitHub Copilot拿用户的开源代码改一改就去挣钱!
  6. win10 无法连接路由器共享设备 报错0X80004005
  7. 带你自学Python系列(四):range、min、max、sum函数
  8. 人体识别_电子皮肤用于人体状态识别的柔性集成传感器
  9. Android实现号码归属地查询
  10. 中国荔枝市场趋势报告、技术动态创新及市场预测
  11. linux下休眠/待机命令
  12. redis和oracle同步方案,redis与oracle之间怎么实现数据同步?
  13. C语言:对包含10个整数的数组进行如下的操作,从下标为0的元素开始到最后一个元素,依次向前移动一个位置。
  14. iview 自定义时间选择器组件_视图更新科技发布View UI组件库(即 iView 4.0),超过50项更新...
  15. TensorFlow+pytorch+gpu+anaconda极简安装教程
  16. Sklearn中的二分类模型可以进行多分类的原理
  17. 抖音小店无货源,营业执照怎么办理?该怎么选择经营范围?
  18. redmon:Redis监控管理Web工具
  19. 【2018年11月12日】其他化学制品行业的股票估值
  20. 命令提示窗口输出汉字

热门文章

  1. 利用python进行数据分析_利用python进行数据分析复现(1)
  2. AJAX入门——工作原理
  3. 计算机的网络功能不包括下面项,计算机网络中,防火墙的功能不包括
  4. I/O复用之 epoll
  5. Time, Clocks, and the Ordering of Events in 翻译
  6. C语言的atoi和C++的to_string
  7. 每日一题:leetcode80.删除有序数组中的重复元素贰
  8. Dungeon Master——BFS
  9. linux网络编程之posix 线程(三):posix 匿名信号量与互斥锁 示例生产者--消费者问题
  10. fork创建多个子进程