WPF的自定义控件 依赖属性,DependencyProperty 路由事件RoutedEvent

起初,想添加TreeView的样式,在MouseOver时整行背景变色,但是我目前在XAML无法实现.

搜索了一下,有个方法在后台也要写代码.

参考:http://www.cnblogs.com/bray/archive/2010/05/01/1725457.html

用这个办法可以解决样式问题,但是不能方便的复用,就想到做成UserControl.

在UserControl里放入一个TreeView,需要 依赖属性ItemsSource 和 路由事件SelectedItemChanged

参考:http://www.cnblogs.com/zhouyinhui/archive/2007/10/27/939920.html

 

以下是我的部分代码

UCTreeView.xaml

 

ExpandedBlockStart.gif View Code
< TreeView   x:Name ="treeview1"   SelectedItemChanged ="treeview1_SelectedItemChanged"  Background =" {x:Null} "   />

 

 

UCTreeView.xaml.cs

 

ExpandedBlockStart.gif View Code
  #region 属性依赖

         public  static  readonly DependencyProperty ItemsSourceProperty =
            DependencyProperty.Register( " ItemsSource "typeof(IEnumerable), 
             typeof(UCTreeView),
             new PropertyMetadata( null, new PropertyChangedCallback(OnItemsSourceChanged)));
          
         public IEnumerable ItemsSource
        {
             get {  return (IEnumerable)GetValue(ItemsSourceProperty); }

             set { SetValue(ItemsSourceProperty, value); }
        } 

         static  void OnItemsSourceChanged( object sender, DependencyPropertyChangedEventArgs args)
        {
             if (sender !=  null && sender  is UCTreeView)
            {
                UCTreeView source = (UCTreeView)sender;
                source.treeview1.ItemsSource = (IEnumerable)args.NewValue;
            }
             
        }
         #endregion

         #region 事件路由

         public  static  readonly RoutedEvent SelectedItemChangedEvent =
            EventManager.RegisterRoutedEvent( " SelectedItemChanged ", RoutingStrategy.Bubble,  typeof(RoutedPropertyChangedEventHandler< object>),  typeof(UCTreeView));

        [Description( " 选择项改变后发生 ")]
         public  event RoutedPropertyChangedEventHandler< object> SelectedItemChanged
        {
            add
            {
                 this.AddHandler(SelectedItemChangedEvent, value);
            }

            remove
            {
                 this.RemoveHandler(SelectedItemChangedEvent, value);
            }
        }

         public  void OnSelectedItemChanged( object oldValue,  object newValue)
        {
            RoutedPropertyChangedEventArgs< object> arg =
                 new RoutedPropertyChangedEventArgs< object>(oldValue, newValue, SelectedItemChangedEvent); 
             this.RaiseEvent(arg); 
        }

         private  void treeview1_SelectedItemChanged( object sender, RoutedPropertyChangedEventArgs< object> e)
        {
               OnSelectedItemChanged(( object)e.OldValue, ( object)e.NewValue);

        }

         #endregion

 

转载于:https://www.cnblogs.com/star250/archive/2012/02/16/2353680.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值