WPF开发,界面处理首选Blend,如果你开发了两年WPF都没接触过blend(当然这种几率不高),或者你刚接触WPF,可以考虑使用Blend,这货也算得上一个神器,上手也不难。以下有两位讲得不错,大家可以翻翻。

  然而在使用的过程中也遇到一些问题、发现了一些技巧,这里整理了下。

1.Blend里窗体宽高设为1024*768含义

 = 窗口的两条边框+内容

   = 窗口标题栏+窗口底边框+系统任务栏
 

  而且,在win7里最大化窗口时会隐藏窗口左右两边和底边的

2.Margin 某个控件的周围与它的直接父容器的间距,布局里经常用到

  Margin 0,0,0,0分别是左,上,右,下 ← ↑ → ↓

3.同样的一个文本控件,字号在VS2010里默认是12号,而在Blend4里却是9号

  这个问题是由于两者字体默认单位不一样,Blend4里默认的单位是英镑,工具→选项→单位 英镑改为像素即可一致。

4.用户控件添加到其他界面后有黄色叹号和虚框

    在项目里生成项目/重新生成项目即可。

5.鼠标移到Grid边框上时不可以选中整行或者整列

  工具→选项→美工板→布局→使用网格布局模式 勾选即可。

6.Blend4嵌入字体后每次运行程序都会在C盘里生成大量文件占用空间

  这个问题一般出现在嵌入字体后,每次跑程序都会在C:\Users\XXX\AppData\Local\Microsoft\Expression\Blend,XXX是用户名,这是Win7的路径,XP可能在其他路径下,目前没有找到什么办法可以阻止,只能手动去删除。

7.blend打开项目、xaml文件一直未响应、打开出错

  是因为这个界面xaml文件里引用了一个类文件(可能是一个资源类,DateContext、或者转换器、或自定义控件),初始化时需要连接数据库,没法连接,所以不要在xaml里引用,在后台里写后行了。
    blend打开项目一直未响应:某个项目下的debug文件夹内文件错误,删除该debug文件夹或者清理下解决方案。其他解决方法:先打开blend或者只打开blend 或者不要用blend跑代码。
    blend打开xaml文件一直未响应:该xaml文件内嵌套的某个UserControl可能在Loaded事件里写了东西,窗体在打开(不管程序有没有跑起来)会去执行该UserControl的loaded事件来初始化这个UserControl,在xmal里移除该UserControl即可,然后再优化loaded事件。或者如下来处理:
//在WPF中
using System.ComponentModel; if (!DesignerProperties.GetIsInDesignMode(this)) {
//...
} //在WinForm开发中,一般会在窗体或者UserControl中判断当前是否为设计状态,如:
if (!this.DesignMode)
{
//
}

  这个方法可以起作用。不过有些东西是写在ViewModel里的,不涉及UI的,这样写会破坏结构。

8.怎样画一条闭合的路径

  • 键盘按P切换到路径选中状态,然后先选中起始点点,按住Shift键不放,鼠标移到另外一个需要连接的点上,等鼠标变成一个圆圈就可以点下去连接上了。
  • 如果是两条不相干的路径,则要先把两条路径同时选中,再进行上面的操作。或者也可以选把两条路径生成一条复合路径再操作。

9.如何画正圆、同心圆

  按住Alt在拖动就可以画个同心的控件

  按住Shift时,可以画出正的控件,即同宽同高
  两个都按住效果可以叠加

10.Blend的路径相减是什么意思

  选中要相减的路径,最后右击的那个路径是被减数A,其他的是减数B,最后结果=被减数-减数

  即结果= A - B
  结论:两路径相减,要保留哪个就在哪个上面右击

11.Blend的触发器层

  如果你的触发器里是这样的顺序

  

  那么控件会先触发MouseOver效果,然后按下的时候,会保持Over的效果,累加按下的效果,如果IsPressed在下面,那么按下的时候不会累加效果,会恢复到原样再执行按下效果。可见,Blend的触发器层是按照现实顺序来的,先触发over,那么就先创建over属性,再创建pressed属性。

12.如何让Grid某列Collapsed时自动释放空间

  使用Grid分为两列,注意:让要自动释放空间的那列权值为0,另一列为1,然后再把为0的那列改成Auto模式,这样当这列里的内容Collapsed时就会释放空间,而另一列自然就填满了。

  在布局的时候,先随便分成两列,然后分别在各自列里布局,好了之后,两列权值分别设成1和0,然后0的那列模式改为Auto,注意最后成型时把0那列的visibility设成Collapsed。利用这个特性可以做自动释放的动画,而不必使用StackPanel来帮你释放空间了。

13.如何快速布局

  方法一:可以选中要布局的对象右键→分组,选一个容器就会直接把选中的对象放到对应的容器里。有时候图省事两个布局差不多的界面会直接复制粘贴,这个时候要注意,在Blend里:

用分组的话内容不会出现-margin
用剪切粘贴的话可能会出现-margin
  方法二:如果我想在一个border里放个充满的grid,你是否会选中这个border,然后去工具栏里选中grid,然后到border里拖一个出来,发现没充满,然后再一个一个设margin?从现在开始,你不用这样做了,在工具栏里选中grid后,直接双击,就会在当前选中的容器里放一个充满的grid,不信你可以试试。

14.Blend4里没有ContextMenu,即右键快捷菜单,所以没法在Blend里编辑ContextMenu的样式

15.尽量不要使用模糊效果,这东西会让程序卡得抓狂

16.巧妙使用“重置”

  主要用在设置Margin的时候,Margin有4个值,一个一个设施相当麻烦的,重置一下,全部置为0,相当方便。

  重置前,点白色的方块即可重置

  重置后

  有木有一键还原的错觉。有的地方使用重置也可以省去不少麻烦,只要你善于发现。

17.如何快速拖动界面

  你还在用滚动条拖界面吗,其实只需要按住空格键,鼠标变成一只小白手之后就可以随便你拖了。

18.如何快速复制一个控件到旁边

  如果你觉得Ctrl+C然后Ctrl+V已经很快了,我再告诉你一个更快的方法:按住Alt直接拖动要复制的控件到合适的位置,松开键盘和鼠标,就能很快的复制一个控件了。

使用Blend的一些问题和技巧的更多相关文章

  1. Silverlight & Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化、波感特效

    当我们在进行Silverlight & Blend进行动画设计的过程中,可能需要设计出很多效果不一的图形图像出来作为动画的基本组成元素.然而在设计过程中可能会出现许多的问题,比如当前绘制了一个 ...

  2. 【全面解禁!真正的Expression Blend实战开发技巧】第十章 FluidMoveBehavior完全解析之三飞出ListBox吧

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第十章 FluidMoveBehavior完全解析之三飞出ListBox吧 刚才有人说我的标题很给力,哈哈.那这个标题肯定更给力了 ...

  3. 【全面解禁!真正的Expression Blend实战开发技巧】十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel)

    原文:[全面解禁!真正的Expression Blend实战开发技巧]十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel) 写这篇文 ...

  4. 【全面解禁!真正的Expression Blend实战开发技巧】第九章 FluidMoveBehavior完全解析之二平滑运动的滚动条

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第九章 FluidMoveBehavior完全解析之二平滑运动的滚动条 这一章讲解FluidMoveBehavior的另一个应用, ...

  5. 【全面解禁!真正的Expression Blend实战开发技巧】第七章 MVVM初体验-在DataGrid行末添加按钮

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第七章 MVVM初体验-在DataGrid行末添加按钮 博客更新较慢,先向各位读者说声抱歉.这一节讲解的依然是开发中经常遇到的一种 ...

  6. 【全面解禁!真正的Expression Blend实战开发技巧】第八章 FluidMoveBehavior完全解析之一漂浮移动

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第八章 FluidMoveBehavior完全解析之一漂浮移动 好久没更新博客了,今天如果没急事,准备连发三篇,完全讲解Blend ...

  7. 【全面解禁!真正的Expression Blend实战开发技巧】第四章 从最常用ButtonStyle开始 - PathButton

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第四章 从最常用ButtonStyle开始 - PathButton 上一篇我们介绍了TextButton,但为了追求界面的张力, ...

  8. 【全面解禁!真正的Expression Blend实战开发技巧】第五章 从最常用ButtonStyle开始 - ImageButton

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第五章 从最常用ButtonStyle开始 - ImageButton 本章围绕ImageButton深入讨论,为什么是Image ...

  9. 【全面解禁!真正的Expression Blend实战开发技巧】第二章 你好,UI设计师

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第二章 你好,UI设计师 你好,UI设计师 曾几何时我从没想过要与艺术家打交道,但是Silverlight改变了这一切.UI设计师 ...

随机推荐

  1. golang学习资料

    http://yougg.github.io/static/gonote/GolangStudy.html 

  2. CI框架自带的验证工具及汉化

    本人自己还是很喜欢CI框架自带的验证工具的,使用方式如下: /** *@blog<http://www.phpddt.com> */ public function do_login() ...

  3. js得到当前页面的url信息

    所有的代码都是可用,而且附了图片的,不过是直接用我自己的文章地址,所以有些显示的有点奇怪. 大家可以找个网址试试代码是否可行. 1,设置或获取对象指定的文件名或路径. console.log(wind ...

  4. VS2013使用EF6通过ADO.NET 连接mySql成功步骤

    VS2013使用EF6通过ADO.NET 连接mySql成功步骤 1.安装mysql-for-visualstudio-1.2.6(我用的目前最新版,这个一般安装VS2013就已经有了,没有的话下载一 ...

  5. docker部署mysql远程连接 解决1251 client does not support ..

    现象:用虚拟机上Docker启动mysql之后无法在本地安装的navicat上远程连接已启动的mysql,错误截图: 原因:mysql 8.0 默认使用 caching_sha2_password 身 ...

  6. 时间日期相关:Date类、DateFormat类、Calendar类

    1 Date类 类 Date 表示特定的瞬间,精确到毫秒. 1秒=1000毫秒 毫秒的0点:公元1970年 一月一日,午夜0:00:00 对应的毫秒值就是0 时间和日期的计算,必须依赖毫秒值. Sys ...

  7. querySelector/querySelectorAll

    querySelector获取页面I属性D为test的元素: document.getElementById("test"); //or document.querySelecto ...

  8. [Loading Component]Loading组件的v-model设计是否不合理?

    vue在2.4.2版本中给computed里的属性加了限制,详见assigning to a computed property without setter does not fail 项目将vue ...

  9. It is not the destination so much as the journey, they say.

    It is not the destination so much as the journey, they say. 人家说目的地不重要,重要的是旅行的过程.<加勒比海盗>

  10. GIT SSH免登录密码实现更新(git pull)、推送(git push)操作

     一.使用场景 现在有两台服务器A和B,在A服务器上搭建有git版本代码仓库,现要实现B服务器SSH免密码登录A服务器,并能够从A服务器拉取.推送代码! 二.操作步骤 1.在B服务器项目根目录下执行以 ...