Silverlight自定义控件系列 – TreeView (3) 添加展开和收起事件
由于Writer嫌我文章过长,只能把上篇拆开两半了。以下是接着上篇的。
准备工作做完了,现在就要完成点击事件。
定义Expander和单击事件:
1: /// <summary>
2: /// The togglebutton for expanding or collapsing the items when mouse left button clicked on it
3: /// </summary>
4: private ToggleButton expander;
5:
1: /// <summary>
2: /// Gets or sets the toggle button Expander
3: /// </summary>
4: public ToggleButton Expander
5: {
6: get
7: {
8: return this.expander;
9: }
10:
11: set
12: {
13: if (this.expander != null)
14: {
15: this.expander.Click -= new RoutedEventHandler(this.OnExpanderClick);
16: }
17:
18: this.expander = value;
19:
20: if (this.expander != null)
21: {
22: this.expander.IsChecked = new bool?(this.IsExpanded);
23: this.expander.Click += new RoutedEventHandler(this.OnExpanderClick);
24: }
25: }
26: }
27:
1: /// <summary>
2: /// Method occurs when mouse left button click on Expander
3: /// </summary>
4: /// <param name="sender">The source object</param>
5: /// <param name="e">The routed event arrguments</param>
6: private void OnExpanderClick(object sender, RoutedEventArgs e)
7: {
8: bool flag = !this.IsExpanded;
9: this.IsExpanded = flag;
10: }
11:
1: /// <summary>
2: /// Method occurs when the expanded state has been changed
3: /// </summary>
4: /// <param name="handler">The target event handler</param>
5: /// <param name="args">The routed arrguments</param>
6: private void ChangeExpandedState(RoutedEventHandler handler, RoutedEventArgs args)
7: {
8: ToggleButton button = this.Expander;
9:
10: if (button != null)
11: {
12: button.IsChecked = new bool?(this.IsExpanded);
13: }
14:
15: this.UpdateVisualState(true);
16: this.RaiseEvent(handler, args);
17: }
18:
接下来就是最后一步了,就是定义展开和收起事件,并把它们和刚才的准备工作结合起来
定义event handler:
1: #region Events
2:
3: /// <summary>
4: /// The expanded event
5: /// </summary>
6: public event RoutedEventHandler Expanded;
7:
8: /// <summary>
9: /// The Collapsed event
10: /// </summary>
11: public event RoutedEventHandler Collapsed;
12:
13: #endregion
14:
定义事件:
1: /// <summary>
2: /// To expand the children
3: /// </summary>
4: /// <param name="e">The routed event arrguments</param>
5: public void OnExpanded(RoutedEventArgs e)
6: {
7: this.ChangeExpandedState(this.Expanded, e);
8: }
9:
10: /// <summary>
11: /// To collapse the children
12: /// </summary>
13: /// <param name="e">The routed event arrguments</param>
14: public void OnCollapsed(RoutedEventArgs e)
15: {
16: this.ChangeExpandedState(this.Collapsed, e);
17: }
18:
修改OnIsExpandedPropertyChanged方法:
1: /// <summary>
2: /// Call back when IsExpanded property has been changed
3: /// </summary>
4: /// <param name="o">The target object</param>
5: /// <param name="e">The property changed event arrguments</param>
6: private static void OnIsExpandedPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
7: {
8: FancyTreeViewItem item = o as FancyTreeViewItem;
9: bool newValue = (bool)e.NewValue;
10: RoutedEventArgs args = new RoutedEventArgs();
11:
12: if (newValue)
13: {
14: item.OnExpanded(args);
15: }
16: else
17: {
18: item.OnCollapsed(args);
19: }
20: }
21:
从模板中寻找Expander模块跟类中Expander按钮对应起来:
1: /// <summary>
2: /// Override the function for banding template
3: /// </summary>
4: public override void OnApplyTemplate()
5: {
6: this.Expander = this.GetTemplateChild("Expander") as ToggleButton;
7: base.OnApplyTemplate();
8: }
9:
最后运行看下效果:
图3.1 节点收起的效果图
图3.2 节点展开的效果图
Silverlight自定义控件系列 – TreeView (3) 添加展开和收起事件的更多相关文章
- Silverlight自定义控件系列 – TreeView (2) 基本布局和States
TreeView的树形结构都以缩进方式显示,现在来完成这部分. 首先,要定义出每个节点上都包含什么东西.先看看Win7资源管理器的TreeView: 图2.1 资源管理器 一个通用的TreeView至 ...
- Silverlight自定义控件系列 – TreeView (1)
原文路径:http://blog.csdn.net/wlanye/article/details/7265457 很多人都对MS自带的控件不太满意(虽然MS走的是简约风格),都会试图去修改或创建让 ...
- Silverlight自定义控件系列 – TreeView (4) 缩进
接下来是缩进,没有缩进的Tree怎么看都不顺眼. 首先,定义节点深度Depth(注:回叫方法暂没有代码,以后要用到): 1: /// <summary> 2: /// Using a De ...
- 一步一步学Silverlight 2系列(25):综合实例之Live Search
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)
述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(19):如何在Silverlight中与HTML DOM交互(上)
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(17):数据与通信之ADO.NET Data Services
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
随机推荐
- POJ3608
计算两个凸包之间的最小距离,旋转卡壳法详解在旋转卡壳的用法之计算两个凸 包上的最近距离 #include <iostream> #include<cstdio> #includ ...
- suse zypper 添加源
一.查看源和仓库 1.查看repos (软件仓库) zypper lr 2.查看services(软件源) zypper ls 二.删除源和仓库 1.删除软件仓库 zypper rr name 2.删 ...
- Qt中layout()->setSizeConstraint(QLayout::SetFixedSize);崩溃的问题
编译环境: win764位,vs2008编译器,cbd调试器,qt4.8 背景: 按照<C++ Gui Qt4编程>书中第二章的一个例子(sortDialog)一步步抄完,编译运行,显示不 ...
- 虚拟机中安装mac系统
虚拟机安装就很简单了,傻瓜式安装,一直点击下一步就行,这里就不多说了. 所需要的配置: 虚拟机下载地址:链接:http://pan.baidu.com/s/1i45wXRf 密码:7c4x mac补丁 ...
- web前端----jQuery属性操作
知识点总结 1.属性 属性(如果你的选择器选出了多个对象,那么默认只会返回出第一个属性). attr(属性名|属性值) - 一个参数是获取属性的值,两个参数是设置属性值 - 点击加载图片示例 remo ...
- P3294 [SCOI2016]背单词
P3294 [SCOI2016]背单词 Trie+贪心 倒插进树+取出重建+子树处理+贪心遍历 倒插进树:把后缀转化为前缀,所以把字符串倒着插进Trie中 取出重建:重新建立一棵以单词为节点的树,如果 ...
- Linux 系统版本查询
显示Linux版本信息 输入"cat /proc/version",说明正在运行的内核版本. 输入"cat /etc/issue", 显示的是发行版本信息. 输 ...
- VC++使用服务做守护进程的示例(转载)
转载:http://blog.csdn.net/zdy0_2004/article/details/40461571 #define _WIN32_WINNT 0x502 #define _CRT_S ...
- QVector排序
QVector<double> tempX ; qSort(tempX.begin(), tempX.end());//从小到大排序
- Package libvirt was not found in the pkg-config search path
关于pip安装libvirt-python的时候提示Package libvirt was not found in the pkg-config search path的问题解决方法 1.一开始以为 ...