WPF编游戏系列 之二 图标效果

       本篇将要实现图标的两个效果:1. 显示图标标签,2. 图标模糊效果。在上一篇中提到Image没有HTML <img>的Title属性(在MSDN中也没找到类似的属性),所以本篇将自行制作一个标签,它的功能是当鼠标移动到图标上方时会显示该图标的Tag说明,并且该图标模糊显示,如下图对比所示。

  原始状态                                                 效果状态

 t1           imagetitle

1. 在Home <Image>中加入MouseEnter和MouseLeave事件。

<Image Source="image/home.png" Width="110" Height="110" Tag="My Home" 
Canvas.Left="30" Canvas.Top="20" Cursor="Hand" MouseEnter="Image_BlurEffect_MouseEnter"
MouseLeave="Image_BlurEffect_MouseLeave"></Image>

2. 事件加好了,就要为添加内容了。先看Image_BlurEffect_MouseEnter事件:

private void Image_BlurEffect_MouseEnter(object sender, MouseEventArgs e)
{
  //将sender定义为Image对象
  Image image = sender as Image;
//创建模糊BlurEffect对象 BlurEffect newBlurEffect = new BlurEffect();
//设定模糊效果值Radius newBlurEffect.Radius = 5;
//为Image添加Blur效果 image.Effect = newBlurEffect;
//将Image Tag内容传给imageTitle Textblock imageTitle.Text = " " + image.Tag.ToString() + " ";
//将imageTitle的Border设置为可见 imageTitleBorder.Visibility = Visibility.Visible;
//调整imageTitleBorder的Canvas位置,使其在图标下方显示 Canvas.SetLeft(imageTitleBorder, Canvas.GetLeft(image) + image.Width / 2 - 15); Canvas.SetTop(imageTitleBorder, 125); }
private void Image_BlurEffect_MouseLeave(object sender, MouseEventArgs e)
{
  Image image = sender as Image;
  BlurEffect newBlurEffect = new BlurEffect();
  newBlurEffect.Radius = 0;
  image.Effect = newBlurEffect;
  imageTitleBorder.Visibility = Visibility.Collapsed;
}

       上一篇回复中,紫色永恒提到可以使用ToolTipService,首先感谢紫色永恒提供建议。经过测试使用ToolTip可以实现标签的功能(代码如下),而且也不用预设显示效果,但是没法通过Canvas设定其位置,大家可以都学习一下。

XAML:

<Image Source="image/home.png" Width="110" Height="110" 
Tag="My Home" Canvas.Left="30" Canvas.Top="20" MouseEnter="Image_BlurEffect_MouseEnter"
MouseLeave="Image_BlurEffect_MouseLeave" Cursor="Hand"> <Image.ToolTip> <TextBlock>My Home</TextBlock> </Image.ToolTip> </Image>

C#代码自然就简单多了:

private void Image_BlurEffect_MouseEnter(object sender, MouseEventArgs e)
{
   Image image = sender as Image;
   BlurEffect newBlurEffect = new BlurEffect();
   newBlurEffect.Radius = 5;
   image.Effect = newBlurEffect;
}

待续… …

作者:李敬然(Gnie)
出处:{GnieTech} (http://www.cnblogs.com/gnielee/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。
posted @ 2009-12-09 11:49 Gnie 阅读(3177) 评论(13) 编辑 收藏

 回复 引用 查看   
#1楼 2009-12-09 20:38 cokkiy      
LZ,我觉得这种动画效果不用代码,而用EventTrigger(在SL中用VisualState,WPF4.0好像也支持VisualState了)实现更好
如果可以的话可以交给美工去做 比程序员做出来的要好看多了

 回复 引用 查看   
#2楼[楼主] 2009-12-09 20:58 Gnie      
@cokkiy
恩,EventTrigger肯定能实现更多动画效果,不过也要写XAML代码:)
这个软件主要是自己练习之用,美工没有哦~
太华丽的也没时间搞了,谢谢建议!

 回复 引用 查看   
#3楼 2010-05-06 14:02 lovecindywang      
一般一般,期待好文。
 回复 引用 查看   
#4楼 2010-05-06 14:02 lovecindywang      
看不懂哦~~
 回复 引用 查看   
#5楼 2010-05-06 14:02 lovecindywang      
楼主辛苦,支持一下!
 回复 引用 查看   
#6楼 2010-05-06 14:02 lovecindywang      
好文要顶,推荐一下!
 回复 引用 查看   
#7楼 2010-05-11 22:28 好俊的功夫啊      
谢谢分享。希望多开一些wpf系列的文章
 回复 引用 查看   
#8楼 2010-11-04 18:09 爱博卡鲁      
一般一般,期待好文。
 回复 引用   
#9楼 2010-11-06 11:22 郭巨侠[未注册用户]
谢谢分享 如果可以的话可以交给美工去做 比程序员做出来的要好看多了


-------------------------------------------------------------
columbia outlet | the north face outlet

 回复 引用 查看   
#10楼 2011-03-19 10:22 徐春建      
很喜欢你的文章,我也是初学者,呵呵。如果用 TOOLTIPSERVICE就可以用样式加效果了。
<Style x:Key="ImageStyle" TargetType="Image">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="BitmapEffect">
<Setter.Value>
<BlurBitmapEffect Radius="5"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
然后在 image里 Style="{StaticResource ImageStyle}"

 回复 引用 查看   
#11楼 2011-03-19 10:38 徐春建      
//调整imageTitleBorder的Canvas位置,使其在图标下方显示
Canvas.SetLeft(imageTitle, (Canvas.GetLeft(image)+image.Width/2)-imageTitle.ActualWidth/2);

 回复 引用 查看   
#12楼 2011-03-19 10:40 徐春建      
private void Image_MouseLeave(object sender, MouseEventArgs e)
{
Image image = sender as Image;
image.Effect = null; //直接为NULL即可
imageTitle.Visibility = Visibility.Collapsed;
}

 回复 引用 查看   
#13楼[楼主] 2011-03-20 19:11 Gnie      
@徐春建
谢谢支持!

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1620086 iIIso7keiIc=
Copyright © 2010 Gnie