乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 148|回复: 9

[转帖]翔麟专集——WPF界面设计技巧(1)—不规则窗体图文指南

[复制链接]

20

主题

73

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
153
发表于 2009-9-29 10:15:00 | 显示全部楼层 |阅读模式
本贴摘自 作者:
初到园子,奉上第一篇入门级,请勿见笑。
以往WinForm编程中,实现不规则窗体是有一定难度的,更难的是不规则窗体的边缘抗锯齿及局部透明处理。而现在,WPF的出现使这个问题迎刃而解,使得我们可以轻松、灵活地美化用户界面。
下面就让我们来看看如何实现一个不规则窗体:
首先我们需要借助Microsoft Expression Design 2来进行图形设计。(这里使用Photoshop等传统软件也可以,但是只能利用PNG格式来实现透明,其缺点就是不支持无损缩放,且不支持动态修改。)
打开Microsoft Expression Design 2中文版,点击菜单“文件 > 新建”,依照下图进行设置,这里将文档尺寸单位设为“像素”,便于与应用程序的布局单位相对应。

                               
登录/注册后可看大图

然后随心所欲的画吧,想画成什么样都行,但注意Microsoft Expression Design 2中绘制的图形并非全部都是矢量的,比如纹理填充、一些特殊笔刷以及滤镜效果(输出时有“将实时效果转换为XAML效果”的选项,但是点了无用,不知道是不是BUG)都会以位图形式输出。
这是我画出来的图形:

                               
登录/注册后可看大图

这里要注意的是:最好将所有元素都放在一个图层里,因为我们后面导出资源字典的时候需要依据图层来分组,我们画好之后要给图层重命名,在这里我给它命名为“back”,这个名称将在后面代码中引用资源时使用。

                               
登录/注册后可看大图

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

20

主题

73

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
153
发表于 2009-9-29 10:17:00 | 显示全部楼层
本贴摘自WPF - 飘雪论坛|WPF论坛NO.1 作者:CStrings
接下来点击菜单“文件 > 导出...”,将格式设为“XAML WPF 资源字典”,分组依据设为“层”,实时效果设为“转换为XAML效果”(貌似无用的设置)。然后按“浏览...”按钮选择输出路径,然后按“全部导出”按钮完成导出。

                               
登录/注册后可看大图

然后就可以保存文件,关闭Microsoft Expression Design 2了。
打开Microsoft Visual Studio 2008,点击菜单“文件 > 新建 > 项目...”,选择“WPF 应用程序”,名称设为“不规则窗体”。
点击菜单“项目 > 添加现有项...”,浏览并选择此前导出的资源字典文件(选的时候注意把右边的文件类型过滤改一下,默认是C#文件类型)。如下图所示,这就是导入的资源字典文件。

                               
登录/注册后可看大图

引入的资源字典内容如下,我们不需要搞明白这些对图形的描述语法,只要了解其中的“x:Key="back"”对应的是我们之前设计时的图层名称,我们在程序中引用此资源时要使用这个名称。
回复

使用道具 举报

20

主题

73

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
153
发表于 2009-9-29 10:19:00 | 显示全部楼层
本贴摘自WPF - 飘雪论坛|WPF论坛NO.1 作者:CStrings
复制代码现在我们要把这个资源字典引入程序集,打开“App.xaml”文件,添加下图中红色框内的代码。

                               
登录/注册后可看大图




                               
登录/注册后可看大图



                               
登录/注册后可看大图


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

                               
登录/注册后可看大图


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

                               
登录/注册后可看大图


    StartupUri="Window1.xaml">

                               
登录/注册后可看大图


   

                               
登录/注册后可看大图


        

                               
登录/注册后可看大图


            

                               
登录/注册后可看大图


               

                               
登录/注册后可看大图


            

                               
登录/注册后可看大图


        

                               
登录/注册后可看大图


   

                               
登录/注册后可看大图


回复

使用道具 举报

20

主题

73

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
153
发表于 2009-9-29 10:20:00 | 显示全部楼层
本贴摘自WPF - 飘雪论坛|WPF论坛NO.1 作者:CStrings
然后打开“Window1.xaml”文件的设计视图,点击窗体边缘以选中窗体,依照下图所示,在属性面板中更改AllowsTransparency及WindowStyle属性。
AllowsTransparency 指示窗体是否支持透明。
WindowStyle指示窗体边框样式,设为 None 为无边框。

                               
登录/注册后可看大图

切换到XAML代码视图,依照下图所示,为 Window 元素添加Background和 MouseDown属性定义。
Background 属性指示窗体的背景,这里引用资源中的“back”,就是我们之前画好的图形啦。
MouseDown 是鼠标按下时产生的事件,我们要为之定义一个事件处理函数以实现窗体拖动功能。

                               
登录/注册后可看大图



                               
登录/注册后可看大图



                               
登录/注册后可看大图

   

                               
登录/注册后可看大图

        

                               
登录/注册后可看大图

   

                               
登录/注册后可看大图



                               
登录/注册后可看大图


在上图的“Window_MouseDown”字符上单击右键,在弹出菜单中选择“定位到事件处理程序”,即会转到“Window1.xaml.cs”代码视图,依照下图输入代码。

                               
登录/注册后可看大图



                               
登录/注册后可看大图

        private void Window_MouseDown(object sender, MouseButtonEventArgs e)

u3c5ave2kq3.gif

u3c5ave2kq3.gif

y4wnpdx2vgm.gif

y4wnpdx2vgm.gif

        

nevrq5s0jvj.gif

nevrq5s0jvj.gif

{

gf0s1csa4zm.gif

gf0s1csa4zm.gif

            if(e.ChangedButton==MouseButton.Left)this.DragMove();

jz0ehnhybcw.gif

jz0ehnhybcw.gif

        }
至此就完成了不规则窗体的创制了。
编译运行看看:

                               
登录/注册后可看大图

嗯嗯,效果很酷的说,你说什么?没有关闭按钮?这么好看的界面你舍得关吗?
好吧,要实现关闭按钮也很简单啦,自己搞个按钮在上面,在 Click 事件中执行 this.Close(); 就OK啦,我是懒得搞了哈。

此效果在任何装有.Net框架3.0的机器上都可以运作,不用再羡慕Adobe AIR的外观了,WPF可以做得更好!

再来张Vista切换窗口时的图:


                               
登录/注册后可看大图

回复

使用道具 举报

275

主题

808

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1909
发表于 2009-9-29 10:23:00 | 显示全部楼层
K.o来抢沙发了
回复

使用道具 举报

0

主题

9

帖子

2

银币

初来乍到

Rank: 1

铜币
9
发表于 2009-9-29 13:21:00 | 显示全部楼层
祥麟开始研究wpf了?
回复

使用道具 举报

1

主题

113

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
117
发表于 2009-9-29 13:47:00 | 显示全部楼层
学习学习,谢谢祥麟
回复

使用道具 举报

13

主题

53

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2009-9-29 16:32:00 | 显示全部楼层
不错,非常漂亮啊
回复

使用道具 举报

1

主题

12

帖子

2

银币

初来乍到

Rank: 1

铜币
16
发表于 2011-5-11 13:45:00 | 显示全部楼层
顶!!!!!!!!!!!!!!
回复

使用道具 举报

130

主题

651

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1172
发表于 2011-9-21 09:46:00 | 显示全部楼层


                               
登录/注册后可看大图

谢谢翔麟转的好帖子
最近也开始学习一些WPF,上面的例子非常详尽,但稍微长些。现在的Express Studio 4已经可以直接制作运行这种不规则窗口例子(可能原文的STUDIO 2也是行的),步骤也挺少的,录了一个屏,记录一下。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-29 18:52 , Processed in 1.302757 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表