WPF小试牛刀
作者:Davidwu 日期:2007-09-23
昨天用VS2005和Blend编了一个简单的写字板程序,正式开始了WPF的开发之旅。下面简单介绍一下其中的收获:
1、 启动窗体的渐入显示,效果如下:

这里用到了2个特性:半透明窗体和时间线(TimeLine)。要让窗体支持半透明(异型窗体),需要如下设置:
this.WindowStyle = WindowStyle.None; //去掉边框
this.AllowsTransparency = true; //允许窗体透明
this.Background = new SolidColorBrush(Colors.Transparent); //设置背景色为透明
而时间线是动画的基础,如果你会用Flash编动画那么你会发现这个功能非常好用。本例中启动窗体的动画制作方法如下:
1) 在Blend中按F7键切换到动画视图方式:

2) 然后添加window.Loaded的事件触发器:

3) 新增一条时间线,并设置相应的关键帧:

4) 将第一个关键帧的透明度设置为0即可:

按F5运行程序,这时可以看到LOGO渐入的动画效果。
主窗体中也采用了几个动画,方法类似于上面。
2、 主窗体中的样式选择采用了比较高级的动画效果,参考了新版的Yahoo Messenger,效果如下:

其实它的主要实现方式还是采用的上面的简单动画的方式,不过应用了一些变形操作,比如在第一个关键帧中设置了0.1的缩放和-90的旋转:


另外,窗体中的各个样式选择块是采用的Image控件,通过MouseEnter事件的处理来实现鼠标移动到控件上控件放大并放到最上层(传统方法是设置ZOrder=0)。MouseEnter处理方法如下:
private void skin_MouseEnter(object sender, MouseEventArgs e)
{
Image img = (Image)sender;
img.RenderTransform = new ScaleTransform(1.2, 1.2);
}
在MouseLeave事件中还原:
private void skin_MouseLeave(object sender, MouseEventArgs e)
{
Image img = (Image)sender;
img.RenderTransform = new ScaleTransform(1, 1);
}
对于设置ZOrder颇费了些周折:一开始便发现在WPF中并没有ZOrder这个属性,google了一下发现问题所在。其实在WPF中元素的呈现顺序是按照XAML中的定义顺序进行的,因此只能通过调整子元素的加入顺序来实现ZOrder了(将需要置顶的控件最后加入),代码如下:
//没有ZOrder了,只能将Child重新按照插入顺序构造
Grid grd = (Grid)this.FindName("grid");
grd.Children.Remove(img);
grd.Children.Add(img);
this.InvalidateVisual();
也就是简单的把当前控件移除,然后再重新加入即可。
3、 RichTextBox的改变:WPF中的RichTextBox编辑方式有了很大改变,以前习惯了通过Selection来操作文本属性(颜色、字体等),现在大部分改成了采用内置命令(Command)的方式。例如设置文本粗体的代码如下:
EditingCommands.ToggleBold.Execute(null, rtb);
你会发现使用内置Command非常的方便,大部分的常用操作WPF都封装好了。当然由于以前熟悉使用API来扩展RTB的功能,现在发现无从下手了,困惑ing!:(
总的说来,感觉WPF在基础层面上确实提供了非常强大的支持,能不能做出好看的UI效果只有看你的美术功底了。而由于前期工具还缺乏,导致频繁切换于VS2005、Expression Blend、Expression Design和Fireworks中,有点麻烦。不过能够作出非常霸道的界面效果感觉还是挺爽的。
另一方面,我的一个感觉是这样的界面开发更加接近于Web页面的设计了,对界面设计人员的专业要求将更高,不仅要求有美术功底,而且要求一定的软件开发经验或者脚本编写能力。从程序员的角度,以往有经验的程序员会“先代码后界面”以提高效率,而现在由于界面元素复杂且界面元素极有可能影响到代码实现,因此导致更多情况下是“先界面后代码”,这样对于编程效率会有一定影响。
以上是我的初步感受,可能随着继续学习WPF会推翻这些看法也未可知!
在谷歌搜索完整的WPF小试牛刀内容, 或者搜索本站相关的更多内容。
1、 启动窗体的渐入显示,效果如下:

这里用到了2个特性:半透明窗体和时间线(TimeLine)。要让窗体支持半透明(异型窗体),需要如下设置:
this.WindowStyle = WindowStyle.None; //去掉边框
this.AllowsTransparency = true; //允许窗体透明
this.Background = new SolidColorBrush(Colors.Transparent); //设置背景色为透明
而时间线是动画的基础,如果你会用Flash编动画那么你会发现这个功能非常好用。本例中启动窗体的动画制作方法如下:
1) 在Blend中按F7键切换到动画视图方式:

2) 然后添加window.Loaded的事件触发器:

3) 新增一条时间线,并设置相应的关键帧:

4) 将第一个关键帧的透明度设置为0即可:

按F5运行程序,这时可以看到LOGO渐入的动画效果。
主窗体中也采用了几个动画,方法类似于上面。
2、 主窗体中的样式选择采用了比较高级的动画效果,参考了新版的Yahoo Messenger,效果如下:

其实它的主要实现方式还是采用的上面的简单动画的方式,不过应用了一些变形操作,比如在第一个关键帧中设置了0.1的缩放和-90的旋转:


另外,窗体中的各个样式选择块是采用的Image控件,通过MouseEnter事件的处理来实现鼠标移动到控件上控件放大并放到最上层(传统方法是设置ZOrder=0)。MouseEnter处理方法如下:
private void skin_MouseEnter(object sender, MouseEventArgs e)
{
Image img = (Image)sender;
img.RenderTransform = new ScaleTransform(1.2, 1.2);
}
在MouseLeave事件中还原:
private void skin_MouseLeave(object sender, MouseEventArgs e)
{
Image img = (Image)sender;
img.RenderTransform = new ScaleTransform(1, 1);
}
对于设置ZOrder颇费了些周折:一开始便发现在WPF中并没有ZOrder这个属性,google了一下发现问题所在。其实在WPF中元素的呈现顺序是按照XAML中的定义顺序进行的,因此只能通过调整子元素的加入顺序来实现ZOrder了(将需要置顶的控件最后加入),代码如下:
//没有ZOrder了,只能将Child重新按照插入顺序构造
Grid grd = (Grid)this.FindName("grid");
grd.Children.Remove(img);
grd.Children.Add(img);
this.InvalidateVisual();
也就是简单的把当前控件移除,然后再重新加入即可。
3、 RichTextBox的改变:WPF中的RichTextBox编辑方式有了很大改变,以前习惯了通过Selection来操作文本属性(颜色、字体等),现在大部分改成了采用内置命令(Command)的方式。例如设置文本粗体的代码如下:
EditingCommands.ToggleBold.Execute(null, rtb);
你会发现使用内置Command非常的方便,大部分的常用操作WPF都封装好了。当然由于以前熟悉使用API来扩展RTB的功能,现在发现无从下手了,困惑ing!:(
总的说来,感觉WPF在基础层面上确实提供了非常强大的支持,能不能做出好看的UI效果只有看你的美术功底了。而由于前期工具还缺乏,导致频繁切换于VS2005、Expression Blend、Expression Design和Fireworks中,有点麻烦。不过能够作出非常霸道的界面效果感觉还是挺爽的。
另一方面,我的一个感觉是这样的界面开发更加接近于Web页面的设计了,对界面设计人员的专业要求将更高,不仅要求有美术功底,而且要求一定的软件开发经验或者脚本编写能力。从程序员的角度,以往有经验的程序员会“先代码后界面”以提高效率,而现在由于界面元素复杂且界面元素极有可能影响到代码实现,因此导致更多情况下是“先界面后代码”,这样对于编程效率会有一定影响。
以上是我的初步感受,可能随着继续学习WPF会推翻这些看法也未可知!
在谷歌搜索完整的WPF小试牛刀内容, 或者搜索本站相关的更多内容。
评论: 3 | 引用: 0 | 查看次数: 5326
- 1
和flash一样了!汗!~~~~~~~~~~~~~
就是一般的ASP空间哈,内容是自己维护的。
OP的空间是哪儿的?多少钱?我的web空间提供者竟然不允许我开启留言功能,nnd.
- 1
发表评论
上一篇
下一篇

文章来自:
Tags: 


















