TreeView的图标个性化和动态数据加载

1、简述

如图,需要在页面上实现一个这样的树状图,具体要求如下:

1、最顶层的行的收缩图标为绿色小三角,其余层存在子节点的行的收缩图标为一个朝右的尖括号和一个绿色小三角,无子节点      的行无需图标;

2、点击小三角时,能收缩或展开节点;

3、点击文字所在行(除小三角所在区域)的任何区域能够响应点击事件,且不影响节点收缩状态;

4、每行有全屏的分割线;

5、点击某一行时,该行背景色变成浅灰色,其余行背景色不变


基于以上的需求,我选用了TreeView插件,通过更改部分源码,实现了一定个性化,且完全满足上述需求。

2、TreeView基本分析

1、正常的TreeView树状图如下图,整体是一个嵌套的无序列表,然后通过TreeView进行样式和事件控制来实现该效果。

2、通过查看TreeView的源码可以看到,每一行实际上是由一个通过JS生成的class为hitarea的div和一个span构成,hitarea为折

      叠图标区域,span主要放置每一行显示的文本,而类似文件夹的图标事实上是span的背景图片,然后通过把更改背景图片

      位置,实现图标显示在文字前方。


3、页面需求的实现

1、三角小图标是通过更改hitarea的样式实现,这个可以百度如何使用div+css实现三角形;

2、尖括号是通过代码<font style="font-weight:bold;float:left;margin-top:5px;" color="#1ea22a">></font>实现,而该段代码要添加

      到TreeView中用JS创建hitarea代码中,如下图


3、上述两步会使所有有子节点的行都存在“尖括号+小三角”,因此还需在所有行创建完后,通过JS删除所有顶行的尖括号,而

       所有顶行的标识可以通过设置专门的id来区分,如folderTop。删除尖括号的JS代码如下


4、点击小三角收缩节点的功能,由于我采用的是用hitarea实现的小三角形,因此节点收缩功能,可以直接默认Treeview的原有

      代码

5、Treeview默认点击文字或文字所在行任意区域,都会折叠或打开节点,要想去掉该效果,需要更改Treeview的JS源码,去掉

      文字的事件响应。代码如下图


6、没一行全屏分割线的实现,需要运用点小技巧,一般人会想到,直接显示span的底框线。如果这样写,你会看到,有的行的

      线不会布满整行。因此可以通过margin-right和padding-right的结合,可以实现底框线右移,但是文字还是保持原来的位置不

      变,代码如下

7实现点击某一行,背景变灰,其余行不变。可以通过设置全局变量,保存上一次点击的行,然后每次将当前行背景色改变成

      灰色前,恢复上一次点击行的背景色,代码如下,(注意corpSearch函数是在TreeView的文字点击事件中调用的)



4、总结

通过这个界面的编写,让自己对TreeView的理解进一步加深。思想无边界,代码无疆!(附上源码如下)

一共三个文件:treeview.html、jquery.treeview.js、jquery.treeview.css;将其放在同一目录下,即可运行!

https://code.csdn.net/snippets/1975805

整体效果图如下:


转载地址:http://blog.csdn.net/qq_28088659/article/details/53091033

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要扩展 WPF 中的 TreeView 控件以使用自定义图标并隐藏复选框,您需要执行以下步骤: 1. 创建一个自定义 TreeView 控件类,该类继承自 WPF 中的 TreeView 类。 2. 创建一个自定义 TreeViewItem 控件类,该类继承自 WPF 中的 TreeViewItem 类,并添加一个属性以存储每个项的自定义图标。 3. 重写 TreeView 控件的默认样式,并在其中定义自定义 TreeViewItem 控件的样式和模板。 4. 在自定义 TreeViewItem 控件的样式和模板中,更改复选框的可见性,并使用绑定将自定义图标属性与实际图标映射。 5. 在代码中使用您的自定义 TreeView 控件,并将数据绑定到其中的 TreeViewItem。 以下是一些示例代码,展示如何执行这些步骤: 1. 自定义 TreeView 控件类: ``` public class CustomTreeView : TreeView { // Add any additional functionality or properties you need for your custom control } ``` 2. 自定义 TreeViewItem 控件类: ``` public class CustomTreeViewItem : TreeViewItem { public static DependencyProperty IconProperty = DependencyProperty.Register("Icon", typeof(ImageSource), typeof(CustomTreeViewItem)); public ImageSource Icon { get { return (ImageSource)GetValue(IconProperty); } set { SetValue(IconProperty, value); } } } ``` 3. 重写 TreeView 控件的默认样式,并在其中定义自定义 TreeViewItem 控件的样式和模板: ``` <Style TargetType="{x:Type local:CustomTreeView}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:CustomTreeView}"> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> <ScrollViewer CanContentScroll="True"> <ItemsPresenter /> </ScrollViewer> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style TargetType="{x:Type local:CustomTreeViewItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:CustomTreeViewItem}"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <CheckBox IsChecked="{Binding Path=IsChecked, RelativeSource={RelativeSource TemplatedParent}}" Visibility="Collapsed" /> <Image Grid.Column="0" Grid.Row="0" Source="{TemplateBinding Icon}" Width="16" Height="16" /> <ContentPresenter Grid.Column="1" Grid.Row="0" Content="{TemplateBinding Header}" /> <ItemsPresenter Grid.Column="1" Grid.Row="1" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> ``` 4. 在自定义 TreeViewItem 控件的样式和模板中,更改复选框的可见性,并使用绑定将自定义图标属性与实际图标映射: ``` <CheckBox IsChecked="{Binding Path=IsChecked, RelativeSource={RelativeSource TemplatedParent}}" Visibility="Collapsed" /> <Image Grid.Column="0" Grid.Row="0" Source="{TemplateBinding Icon}" Width="16" Height="16" /> ``` 5. 在代码中使用您的自定义 TreeView 控件,并将数据绑定到其中的 TreeViewItem: ``` <local:CustomTreeView> <local:CustomTreeViewItem Header="Item 1" Icon="/Images/Icon1.png"> <local:CustomTreeViewItem Header="Subitem 1" Icon="/Images/Icon2.png" /> <local:CustomTreeViewItem Header="Subitem 2" Icon="/Images/Icon3.png" /> </local:CustomTreeViewItem> <local:CustomTreeViewItem Header="Item 2" Icon="/Images/Icon4.png"> <local:CustomTreeViewItem Header="Subitem 3" Icon="/Images/Icon5.png" /> <local:CustomTreeViewItem Header="Subitem 4" Icon="/Images/Icon6.png" /> </local:CustomTreeViewItem> </local:CustomTreeView> ``` 这些代码示例应该为您提供了一个起点,以帮助您创建一个具有自定义图标和隐藏复选框的扩展 TreeView 控件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值