silverlight MVVM 附加属性AttachedBehaviors的实现

来源:互联网 发布:mac mysql管理工具 编辑:程序博客网 时间:2024/05/10 02:24

附加属性类

using System;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;namespace DTO.SL{    /// <summary>    /// 附加属性类    /// </summary>    public class AttachedBehavior    {        public static readonly DependencyProperty BrushProperty = DependencyProperty.RegisterAttached(            "Brush", typeof(Brush), typeof(AttachedBehavior), new PropertyMetadata(null, new PropertyChangedCallback(OnBrushChanged)));        /// <summary>        /// 属性修改事件        /// </summary>        public static void OnBrushChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)        {            //获取属性所在的控件            TextBlock con = obj as TextBlock;            //注册控件事件            if (con != null)            {                con.MouseEnter += new MouseEventHandler(OnControlEnter);                con.MouseLeave += new MouseEventHandler(OnControlLeave);            }        }        /// <summary>        /// 获取属性的值        /// </summary>        /// <param name="boj"></param>        /// <returns></returns>        public static Brush GetBrush(DependencyObject boj)        {            return (Brush)boj.GetValue(BrushProperty);        }        /// <summary>        /// 设置属性的值        /// </summary>        /// <param name="boj"></param>        /// <param name="value"></param>        public static void SetBrush(DependencyObject boj, Brush value)        {            boj.SetValue(BrushProperty, value);        }        /// <summary>        /// 鼠标进入事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private static void OnControlEnter(object sender, MouseEventArgs e)        {            //获取当前控件            TextBlock con = (TextBlock)e.OriginalSource;            //设置控件颜色为红色            con.Foreground = new SolidColorBrush(Colors.Red);        }        /// <summary>        /// 鼠标离开事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private static void OnControlLeave(object sender, MouseEventArgs e)        {            //获取当前控件            TextBlock con = (TextBlock)e.OriginalSource;            //设置控件的颜色为控件的附加Brush属性            con.Foreground = GetBrush(con);        }    }}

Xaml代码

    xmlns:Custom="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"             xmlns:myConvert="clr-namespace:DTO.SL;assembly=DTO.SL"            <TextBlock Width="100" Text="GOLD" myConvert:AttachedBehavior.Brush="Gold"></TextBlock>            <TextBlock Width="100" Text="Violet" myConvert:AttachedBehavior.Brush="Violet"></TextBlock>            <TextBlock Width="100" Text="LemonChiffon" myConvert:AttachedBehavior.Brush="LemonChiffon"></TextBlock>


0 0
原创粉丝点击