起初,想添加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

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

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

  1. WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性

    原文:WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性 如果你要自定义一个图片按钮控件,那么如何在主窗体绑定这个控件上图片的Source呢? ...

  2. SilverlightWPF依赖属性DependencyProperty讲解

    作者:周永恒  出处:http://www.cnblogs.com/Zhouyongh   本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  3. WPF usercontrol 自定义依赖属性

    1.依赖属性不同意一般属性,一般属性主要定义在对象中,而依赖属性是存在一个特殊的依赖属性表中. 2.当我们触发改变值时,需要通过SetValue这种方式进行触发. UserControl1.xaml: ...

  4. WPF,Silverlight与XAML读书笔记第八 - WPF新概念之三路由事件

    说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘>的编排,对内容进行了总结并加入一些个人理解. 路由事件是专门设计用于在元素树中使用的事件. ...

  5. WPF基础到企业应用系列8——依赖属性之“风云再起”

    一. 摘要 首先圣殿骑士很高兴"WPF 基础到企业应用系列" 能得到大家的关注.支持和认可.看到很多朋友留言希望加快速度的问题,我会尽力的,对你们的热情关注也表示由衷的感谢.这段时 ...

  6. 了解 WPF 中的路由事件和命令

    目录 路由事件概述 WPF 元素树 事件路由 路由事件和组合 附加事件 路由命令概述 操作中的路由命令 命令路由 定义命令 命令插入 路由命令的局限 避免命令出错 超越路由命令 路由处理程序示例 要想 ...

  7. WPF快速入门系列(2)——深入解析依赖属性

    一.引言 感觉最近都颓废了,好久没有学习写博文了,出于负罪感,今天强烈逼迫自己开始更新WPF系列.尽管最近看到一篇WPF技术是否老矣的文章,但是还是不能阻止我系统学习WPF.今天继续分享WPF中一个最 ...

  8. WPF的依赖属性和附加属性(用法解释较全)

    转:https://www.cnblogs.com/zhili/p/WPFDependencyProperty.html 一.引言 感觉最近都颓废了,好久没有学习写博文了,出于负罪感,今天强烈逼迫自己 ...

  9. 初步了解WPF依赖属性

    一 依赖属性 在WPF库实现中,依赖属性使用普通的C#属性进行了包装,使得我们可以通过和以前一样的方式来使用依赖属性.但必须明确,在WPF中我们大多数都在使用依赖属性,而不是使用属性.依赖属性重要性在 ...

最新文章

  1. POJ 3320 Jessica's Reading Problem (尺取)
  2. Docker Review - Docker 概念 入门篇
  3. ngrok服务器搭建
  4. eks volumn s3_威客电竞 深渊联赛S3欧洲区总决赛,Secret成就八连冠
  5. 使用 C# 编程对RTF文档的支持
  6. 暴力——猜数字(hdu1172)
  7. java中计算平均成绩_Java计算平均成绩
  8. 上海计算机应用基础自考上机,上海2012年自考《计算机应用基础》上机考核大纲...
  9. android4.0 禁止横竖屏切换使用 android:configChanges=orientation|keyboardHidden无效
  10. qcc烧录工具QCC30xx/QCC51xx全系列支持烧录工具qcc3020/3040/5124/5126qcc烧录软件
  11. Python笔记 之 矩阵元素选取
  12. 向已知EXCEL模板写入数据并导出
  13. win7计算器左移、右移操作
  14. redis获取哈希类型的值,hget、hmget、hgetall
  15. 基于单片机的超市储物柜设计_智能储物柜开题报告.docx
  16. 基于51单片机的电子时钟(数码管显示)
  17. survival | 生存分析(3):生存曲线(下)
  18. 睡眠健康与肠道健康之间的双向联系
  19. [EI检索]2022智能制造、先进传感与大数据国际会议诚邀您关注
  20. 计算机没有管理无线网络,笔记本win7系统下没有无线网络选项的解决方法

热门文章

  1. Mybatis源码研究6:元数据(metadata)
  2. UNIX环境高级编程——Linux终端设备详解
  3. 在2012年安装XCODE旧版本的错误解决方法
  4. Linux Shell常用技巧(二)
  5. android 监听手机电量变化
  6. 【Android】launcher启动参数
  7. Hotspot垃圾回收
  8. 错误管道反应:Paul Szymkowiak和上下文驱动的思想家如何交谈
  9. JDBC的入门案列以及JDBC的对事务的管理
  10. 如何把安全证书导入到java中的cacerts证书库(转)