zoukankan      html  css  js  c++  java
  • 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

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

    UCTreeView.xaml.cs

    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
  • 相关阅读:
    hdu2191(多重背包)
    hdu3664(递推dp)
    hdu2955(变形01背包)
    hdu1712(分组背包)
    hdu1114(完全背包)
    hdu4004(二分)
    hdu2870(dp求最大子矩阵)
    POJ 1979 Red and Black(水题,递归)
    POJ 1922 Ride to School(贪心+模拟)
    POJ 1182 食物链(种类并查集)
  • 原文地址:https://www.cnblogs.com/star250/p/2353680.html
Copyright © 2011-2022 走看看