实现WPF不规则窗体的三种常用的方法如下:

1.使用Blend等工具绘制一个不规则xaml,然后作为窗体的背景。这个可以参考xiaowei0705的这篇博文:WPF制作不规则的窗体 。

2.给window的Clip属性赋Path值。这个可以参考DebugLZQ前面的博文:WPF Effect Clip以及Transform 

3.使用透明背景的PNG图像。本文将要讲述。

本文将要讲述的这种方法,可以说一点技术含量都没有,基本不用动手编写代码。前提是你得有合适的透明背景的PNG图像。

我们假设你已经完成了PNG图像的制作(当然为了演示的话,down一个也行),那么这个不规则窗体实现如下:

<Window x:Class="WPFSharpWindow.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="412" Width="528" AllowsTransparency="True" WindowStyle="None" OpacityMask="White" Background="Transparent"><Grid MouseLeftButtonDown="Grid_MouseLeftButtonDown"><Image Stretch="Fill" Source="/WPFSharpWindow;component/cow.png" /></Grid>
</Window>

解释下这个xaml需要注意的属性设置:

  allowstransparency="True" - 允许透明

  background="Transparent" - 设置背景透明

  windowstyle="None" - 去掉边框

  opacitymask="White" - 设置白色透明

为Gird订阅的MouseLeftButtonDown路由事件,是为了实现窗体的拖动。事件处理如下:

private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{this.DragMove();
}

实现效果如下:

效果不清楚?再来两张

题外话:越来越发现发到博客园首页的博文质量是越来越差了,很多文章根本没有一点价值,纯垃圾~

真心建议发到首页的博文,希望博文的作者能够花点时间,分享有价值的东西,不要哗众取宠~试想:你发到首页的博文你自己以后都不愿意去看的,何况别人?也希望博客园团队加强监管力度!

我们写博文的目的是为了分享,分享本来就是一种积累,写博文的过程可以看做是一种沉淀,所以这是一个双赢的事。个人愚见,欢迎批评指正~

“只要人人都献出一点爱,世界将变成美好的人间...”

Update:

需要运行时更新窗体样式怎么办?即更新图片即可:

private void button1_Click(object sender, RoutedEventArgs e)
{var uriSource = new Uri(@"/WPFSharpWindow;component/HotPot.png", UriKind.Relative);imgBackground.Source=new BitmapImage(uriSource);
}

原文地址:http://www.cnblogs.com/DebugLZQ/archive/2013/05/16/3081802.html

转载于:https://www.cnblogs.com/weikai/archive/2013/06/15/3137154.html

[转][小结][三种方法]实现WPF不规则窗体相关推荐

  1. python求1到n的乘积_Python实现矩阵相乘的三种方法小结

    问题描述 分别实现矩阵相乘的3种算法,比较三种算法在矩阵大小分别为22∗2222∗22, 23∗2323∗23, 24∗2424∗24, 25∗2525∗25, 26∗2626∗26, 27∗2727 ...

  2. c++语言定义排序函数,关于C++中定义比较函数的三种方法小结

    C++编程优与Pascal的原因之一是C++中存在STL(标准模板库).STL存在很多有用的方法. C++模板库中的许多方法都需要相关参数有序,例如Sort().显然,如果你想对一个集合进行排序,你必 ...

  3. python怎么循环终止_Python 循环终止语句的三种方法小结

    Python 循环终止语句的三种方法小结 在Python循环终止语句有三种: 1.break break用于退出本层循环 示例如下: while True: print "123" ...

  4. php 打印对象到文件,php实现将数组或对象写入到文件的方法小结【三种方法】...

    本文实例讲述了php实现将数组或对象写入到文件的方法.分享给大家供大家参考,具体如下: php将数组或对象原样写入或保存到文件有三种方法可以实现 第一种方法是使用serialize, 第二种方法是使用 ...

  5. php遍历数组哪个效率高,PHP遍历数组的三种方法及效率对比分析

    PHP遍历数组的三种方法及效率对比分析 发布于 2015-03-04 21:55:27 | 129 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...

  6. Altium designer不显示飞线的三种方法

    原文:http://bbs.eeworld.com.cn/thread-478174-1-1.html 今天,碰到一位网友,搞了个PCB的工程,并且原理图ECO后,update到PCB sheet后发 ...

  7. ps自定义形状工具_PS教程——用PS绘制虚线的三种方法

    点线面是平面构成的基本元素,而线条在平面设计中亦有规整分割版面.装饰造型的作用,能大幅提升版面的可读性.学会用PS绘制线条是每个自学平面设计初学者的基本功,本篇平面设计学习日记, @酷coo豆一孔之见 ...

  8. canvas 判断哪个元素被点击_监听 Canvas 内部元素点击事件的三种方法

    canvas内部元素不能像DOM元素一样方便的添加交互事件监听,因为canvas内不存在"元素"这个概念,他们仅仅是canvas绘制出来的图形.这对于交互开发来说是一个必经障碍,想 ...

  9. mysql添加临时索引_mysql 中添加索引的三种方法

    在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以通过不同的应用场景来进行索引的新建,在此列出三种新建索引的方法 mysql 中添加索引的三种方法 1.1 新建表中添加索 ...

最新文章

  1. python图合并_Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
  2. canvas学习之粒子动画
  3. android 按钮动画效果_【css特效】按钮动画 - 按压效果
  4. Notepad++ 删除空白行的方法(转)
  5. php购票排位_用PHP+MySQL实现12306购票和退票以及余票查询逻辑
  6. 【转】注册Azure AD 2.0 应用程序
  7. 算法竞赛入门经典 例题6-6 小球下落(python、C)
  8. Android音频实时传输与播放(四):源码下载(问题更新)【转】
  9. 计算机网络系统由什么系统组成,从资源构成上看计算机网络系统由什么构成
  10. spring-boot-2.0.3应用篇 - shiro集成
  11. android mtk平台的fm停止搜索,【MTK平台,手机工程模式知识及方法详解】
  12. 程序员如何一键“Get”高清壁纸?
  13. 获取指定域名的IP地址
  14. mysql 定时备份 空_如何在不停止Mysql服务的状况下,定时备份mysql数据库
  15. 工科数学分析-微积分(1)
  16. 无线网络管理工具wifi hoper在win7上的安装方法及推荐软件inSSIDer
  17. 中国网络安全厂商、安全培训机构大全(2019-7-1)
  18. 寒武纪2021数字后端笔试题
  19. 1. 认识kubernetes
  20. 中国队没进世界杯,但是其他遍地都是“中国制造”!

热门文章

  1. Kotlin协程使用,协程使用注意事项,协程中的await方法使用|不使用suspend使用协程
  2. 2022-2028年中国抽油烟机行业投资分析及前景预测报告
  3. debian10 chrony简单配置
  4. 全面理解Python中的类型提示(Type Hints)
  5. 深入理解 Embedding层的本质
  6. torch.nn.Linear()函数的理解
  7. 几何深度学习(Geometric Deep Learning)技术
  8. TVM性能评估分析(五)
  9. H.264 Video Codec速度和质量
  10. 车载网络处理器带来多功能能力