在前两篇文章中,我们已经创建了“放大镜效果”和“放大镜CheckBox”,本篇内容将通过CheckBox来控制放大镜效果的开/关状态,并完成全部“放大镜”功能。在进行本篇内容前请确保您已经阅读过:
・ Silverlight 解谜游戏 之五 放大镜(1)
・ Silverlight 解谜游戏 之六 放大镜(2)
在完成本篇内容后将实现以下效果:
1. 下载BaseBehavior.zip 进入VS 将以下程序加入到Interactivity 文件夹(参考资料 Base Classes for Custom Behaviors)
・ BaseBehavior.cs
・ BaseBehaviorT.cs
2. 下载SetInteractionPropertyAction.zip 新增Interactivity\SetInteractionPropertyAction 文件夹,并将以下程序加入其中(参考资料 Creating an Action to set Properties on Actions & Behaviors)
・ ConverterHelper.cs
・ SetInteractionPropertyAction.cs
添加完以上四个程序,注意其命名空间应为:Findobject。
其中,ConverterHelper.cs 和SetInteractionPropertyAction.cs 程序需要使用CodePlex 的Expression Blend Samples 项目,下载安装后将Expression.Samples.Interactivity、Expression.Samples.Shaders 加入Reference:
3. 打开MagnifIErOverBehavior.cs 要使MagnifIErOverBehavior 继承BaseBehavior 类,以此来使用IsEnabled 属性。将Behavior 改为BaseBehavior:
public class MagnifIErOverBehavior : BaseBehavior<FrameworkElement>
将Associatedobject_MouseEnter 默认显示放大镜注释掉,需要通过IsEnabled 来进行调用:
private voID Associatedobject_MouseEnter( object sender,MouseEventArgs e ) { this.Associatedobject.MouseMove +=
new MouseEventHandler( Associatedobject_MouseMove ); //this.Associatedobject.Effect = this.magnifIEr; }
Associatedobject_MouseMove 也要通过IsEnabled 来判断是否开启放大镜功能:
private voID Associatedobject_MouseMove( object sender,MouseEventArgs e ) { if (IsEnabled) { if (this.Associatedobject.Effect != this.magnifIEr) { this.Associatedobject.Effect = this.magnifIEr; } (this.Associatedobject.Effect as MagnifIEr).Center = e.Getposition(this.Associatedobject); Point mouseposition = e.Getposition(this.Associatedobject); mouseposition.X /= this.Associatedobject.ActualWIDth; mouseposition.Y /= this.Associatedobject.ActualHeight; this.magnifIEr.Center = mouseposition; Storyboard zoomInStoryboard = new Storyboard(); DoubleAnimation zoomInAnimation = new DoubleAnimation(); zoomInAnimation.To = this.magnifIEr.Magnification; zoomInAnimation.Duration = TimeSpan.FromSeconds(0.5); Storyboard.SetTarget(zoomInAnimation,this.Associatedobject.Effect); Storyboard.SetTargetProperty(zoomInAnimation,
new PropertyPath(MagnifIEr.MagnificationProperty)); zoomInAnimation.FillBehavior = FillBehavior.HoldEnd; zoomInStoryboard.Children.Add(zoomInAnimation); zoomInStoryboard.Begin(); } }
4. 回到Blend,在TreeVIEw 中打开magnifIErCanvas 选择MagnifIErOverBehavior 将其命名为magnifIErBehavior,并将IsEnabled 属性设为false:
5. 在Assets->Behaviors 中为CheckBox 添加两个SetInteractionPropertyAction:
6. 第一个SetInteractionPropertyAction 用于启动放大镜功能,进行如下设置:
・ Eventname: Checked
・ Targetname: magnifIErCanvas
・ Objectname: magnifIErBehavior
・ Propertyname: IsEnabled
・ Value: true
7. 第二个SetInteractionPropertyAction 用于关闭放大镜功能,进行如下设置:
・ Eventname: Unchecked
・ Targetname: magnifIErCanvas
・ Objectname: magnifIErBehavior
・ Propertyname: IsEnabled
・ Value: false
8. 确定CheckBox 的IsChecked 属性是false 状态,运行程序便可实现放大镜可控效果。
9. 最后在放大镜下面加一个Notepad 图片,使其更加美观:
源代码下载:
总结以上是内存溢出为你收集整理的Silverlight 解谜游戏 之七 放大镜(3)全部内容,希望文章能够帮你解决Silverlight 解谜游戏 之七 放大镜(3)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)