• 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
  • 相关阅读:
    点击鼠标后系统自动生成对应消息
    mfc 鼠标、键盘响应事件
    VC中键盘键的对应关系
    补充知识及数据类型
    Python入门
    tomcat启动报错
    正则表达式
    MySQL修改root密码的方法
    mysql 压缩包免安装版 安转步骤
    springmvc--json--返回json的日期格式问题
  • 原文地址:https://www.cnblogs.com/star250/p/2353680.html
Copyright © 2020-2023  润新知