Windows Phone 7 MVVM模式通讯方式之实现Attached Behavior

MVVM模式的View与ViewModel的三大通讯方式:Binding Data(实现数据的传递)、Command(实现操作的调用)和Attached Behavior(实现控件加载过程中的操作)。

(1)MainPage.xaml页面代码,View层
复制代码
   
   
< phone:PhoneApplicationPage x:Class ="AttachedBehaviorDemo.MainPage" xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone ="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell ="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d ="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc ="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local ="clr-namespace:AttachedBehaviorDemo" mc:Ignorable ="d" d:DesignWidth ="480" d:DesignHeight ="768" FontFamily =" {StaticResource PhoneFontFamilyNormal} " FontSize =" {StaticResource PhoneFontSizeNormal} " Foreground =" {StaticResource PhoneForegroundBrush} " SupportedOrientations ="Portrait" Orientation ="Portrait" shell:SystemTray.IsVisible ="True" > < Grid x:Name ="LayoutRoot" Background ="Transparent" > < Grid.RowDefinitions > < RowDefinition Height ="Auto" /> < RowDefinition Height ="*" /> </ Grid.RowDefinitions > < StackPanel x:Name ="TitlePanel" Grid.Row ="0" Margin ="12,17,0,28" > < TextBlock x:Name ="ApplicationTitle" Text ="MY APPLICATION" Style =" {StaticResource PhoneTextNormalStyle} " /> < TextBlock x:Name ="PageTitle" Text ="AttachedBehavior" Margin ="9,-7,0,0" Style =" {StaticResource PhoneTextTitle1Style} " /> </ StackPanel > < Grid x:Name ="ContentPanel" Grid.Row ="1" Margin ="12,0,12,0" > < TextBlock FontSize ="50" Text ="金色 Gold" local:Behavior.Brush ="Gold" Margin ="0,6,0,504" /> < TextBlock FontSize ="50" Text ="绿色 Green" local:Behavior.Brush ="Green" Margin ="0,94,0,416" /> < TextBlock FontSize ="50" Text ="蓝色 Blue" local:Behavior.Brush ="Blue" Margin ="0,184,0,339" /> < TextBlock FontSize ="50" Text ="橙色 Orange" local:Behavior.Brush ="Orange" Margin ="-3,274,3,243" /> < TextBlock FontSize ="50" Text ="紫色 Purple" local:Behavior.Brush ="Purple" Margin ="0,386,0,133" /> < TextBlock FontSize ="50" Text ="橄榄色 Olive" local:Behavior.Brush ="Olive" Margin ="0,497,0,0" Height ="110" VerticalAlignment ="Top" /> </ Grid > </ Grid > </ phone:PhoneApplicationPage >
复制代码
(2) Behavior.cs 类代码,处理附加的属性和事件。
复制代码
   
   
using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; namespace AttachedBehaviorDemo { static public class Behavior { // 注册一个附加属性BrushProperty,在XAML中名字为Brush,是Brush类型,在Hover类中,PropertyMetadata初始化元数据 public static readonly DependencyProperty BrushProperty = DependencyProperty.RegisterAttached( " Brush " , typeof (Brush), typeof (Behavior), new PropertyMetadata ( null , new PropertyChangedCallback(OnHoverBrushChanged))); /// <summary> /// 获取Brush的属性值 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static Brush GetBrush(DependencyObject obj) { return (Brush)obj.GetValue(BrushProperty); } /// <summary> /// 设置属性的值 /// </summary> /// <param name="obj"></param> /// <param name="value"></param> public static void SetBrush(DependencyObject obj, Brush value) { obj.SetValue(BrushProperty, value); } /// <summary> /// 属性初始化 /// </summary> /// <param name="obj"></param> /// <param name="args"></param> private static void OnHoverBrushChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args) { // 获取属性所在的TextBlock控件 TextBlock control = obj as TextBlock; // 注册控件的事件 if (control != null ) { // 注册鼠标进入事件 control.MouseEnter += new MouseEventHandler(OnControlEnter); // 注册鼠标离开事件 control.MouseLeave += new MouseEventHandler(OnControlLeave); } } /// <summary> /// 鼠标进入事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> static void OnControlEnter( object sender, MouseEventArgs e) { // 获取当前的TextBlock控件 TextBlock control = (TextBlock)e.OriginalSource; // 设置控件的前景颜色为红色 control.Foreground = new SolidColorBrush(Colors.Red); } /// <summary> /// 鼠标离开事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> static void OnControlLeave( object sender, MouseEventArgs e) { // 获取当前的TextBlock控件 TextBlock control = (TextBlock)e.OriginalSource; // 设置控件的前景颜色为当前控件的Brush属性的值 control.Foreground = GetBrush(control); } } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值