WPF 基础控件之 TreeView 样式

其他基础控件

1.Window
2.Button
3.CheckBox
4.ComboBox
5.DataGrid
6.DatePicker
7.Expander
8.GroupBox
9.ListBox
10.ListView
11.Menu
12.PasswordBox
13.TextBox
14.RadioButton
15.ToggleButton
16.Slider

TreeView  实现下面的效果

3265739a73e5a32c1daf9f9a30d4c79c.png

1)TreeView来实现动画;

  • Grid 分两列第0列展示ToggleButton ,第一列展示ItemsPresenter

  • Border.RenderTransformScaleTransform ScaleY="0"

  • Expanded设置为true修改Border.RenderTransformScaleTransform ScaleY="1"

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:sys="clr-namespace:System;assembly=mscorlib"xmlns:wpfs="clr-namespace:WPFDevelopers.Minimal.Helpers"><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="../Themes/Basic/ControlBasic.xaml"/><ResourceDictionary Source="../Themes/Basic/Animations.xaml"/></ResourceDictionary.MergedDictionaries><Style TargetType="{x:Type TreeView}" BasedOn="{StaticResource ControlBasicStyle}"><Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" /><Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" /><Setter Property="BorderThickness" Value="1"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="TreeView"><Border Name="Border" BorderThickness="{TemplateBinding BorderThickness}"BorderBrush="{DynamicResource BaseSolidColorBrush}"Background="{DynamicResource WhiteSolidColorBrush}"><ScrollViewer Focusable="False"CanContentScroll="False" Padding="4"><ItemsPresenter /></ScrollViewer></Border></ControlTemplate></Setter.Value></Setter></Style><Style x:Key="ExpandCollapseToggleStyle" TargetType="{x:Type ToggleButton}"BasedOn="{StaticResource ControlBasicStyle}"><Setter Property="Focusable" Value="False" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ToggleButton"><Grid Width="15" Height="13" Background="Transparent"><VisualStateManager.VisualStateGroups><VisualStateGroup x:Name="CheckStates"><VisualState x:Name="Checked">                                    <Storyboard>                                        <DoubleAnimation Duration="00:00:.2" To="90"                                             Storyboard.TargetProperty="(Path.RenderTransform).(RotateTransform.Angle)"                                             Storyboard.TargetName="Expanded"/>                                    </Storyboard>                                </VisualState>                                <VisualState x:Name="Unchecked">                                    <Storyboard>                                        <DoubleAnimation Duration="00:00:.2" To="0"                                             Storyboard.TargetProperty="(Path.RenderTransform).(RotateTransform.Angle)"                                             Storyboard.TargetName="Expanded"/>                                    </Storyboard>                                </VisualState><VisualState x:Name="Indeterminate" /></VisualStateGroup></VisualStateManager.VisualStateGroups><Path x:Name="Expanded"Stretch="Fill" Height="10" Width="6"                              Data="{StaticResource PathNext}"                              RenderTransformOrigin=".5,.5">                            <Path.Fill>                                <SolidColorBrush Color="{DynamicResource PrimaryTextColor}" />                            </Path.Fill>                            <Path.RenderTransform>                                <RotateTransform/>                            </Path.RenderTransform></Path></Grid></ControlTemplate></Setter.Value></Setter></Style><Style x:Key="TreeViewItemFocusVisual"><Setter Property="Control.Template"><Setter.Value><ControlTemplate><Border><Rectangle Margin="0,0,0,0"StrokeThickness="5"Stroke="Black"StrokeDashArray="1 2"Opacity="0" /></Border></ControlTemplate></Setter.Value></Setter></Style><Style TargetType="{x:Type TreeViewItem}" BasedOn="{StaticResource ControlBasicStyle}"><Setter Property="Background" Value="Transparent" /><Setter Property="HorizontalContentAlignment" Value="{Binding Path=HorizontalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" /><Setter Property="VerticalContentAlignment" Value="{Binding Path=VerticalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" /><Setter Property="Padding" Value="10" /><Setter Property="Cursor" Value="Hand"/><Setter Property="FocusVisualStyle" Value="{StaticResource TreeViewItemFocusVisual}" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type TreeViewItem}"><Grid><VisualStateManager.VisualStateGroups><VisualStateGroup x:Name="ExpansionStates"><VisualState x:Name="Expanded"><Storyboard><DoubleAnimation Duration="00:00:.2"To="1"Storyboard.TargetProperty="(Border.RenderTransform).(ScaleTransform.ScaleY)"Storyboard.TargetName="PART_ItemsHost"/></Storyboard></VisualState><VisualState x:Name="Collapsed"/></VisualStateGroup></VisualStateManager.VisualStateGroups><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition/></Grid.RowDefinitions><Border x:Name="PART_Border"BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True"><DockPanel LastChildFill="True"><ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ExpandCollapseToggleStyle}"/><ContentPresenter VerticalAlignment="Center" x:Name="PART_Header" ContentSource="Header" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/></DockPanel></Border><Border Grid.Row="1" RenderTransformOrigin=".5,0"x:Name="PART_ItemsHost"><Border.RenderTransform><ScaleTransform ScaleY="0"/></Border.RenderTransform><ItemsPresenter x:Name="ItemsHost"/></Border><!--<ItemsPresenter x:Name="ItemsHost" Grid.Row="1"/>--></Grid><ControlTemplate.Triggers><Trigger Property="IsMouseOver" SourceName="PART_Border" Value="True"><Setter Property="Background" TargetName="PART_Border" Value="{DynamicResource BaseMoveColorSolidColorBrush}"/></Trigger><Trigger Property="IsExpanded" Value="False"><Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/></Trigger><Trigger Property="HasItems" Value="False"><Setter Property="Visibility" TargetName="Expander" Value="Hidden"/></Trigger><Trigger Property="IsSelected" Value="True"><Setter Property="Background" TargetName="PART_Border" Value="{DynamicResource BaseSolidColorBrush}"/></Trigger><MultiTrigger><MultiTrigger.Conditions><Condition Property="IsSelected" Value="True"/><Condition Property="IsSelectionActive" Value="False"/></MultiTrigger.Conditions><Setter Property="Background" TargetName="PART_Border" Value="{DynamicResource WhiteSolidColorBrush}"/></MultiTrigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style></ResourceDictionary>

2)Styles.TreeView.xaml 代码如下;

<WrapPanel Margin="0,10"><TreeView ItemsSource="{Binding UserCollection,RelativeSource={RelativeSource AncestorType=local:MainView}}"><TreeView.ItemTemplate><HierarchicalDataTemplate ItemsSource="{Binding Children}"><Border><TextBlock Text="{Binding Path=Name}"/></Border></HierarchicalDataTemplate></TreeView.ItemTemplate></TreeView><TreeView IsEnabled="False" Margin="10,0" BorderThickness="0"ItemsSource="{Binding UserCollection,RelativeSource={RelativeSource AncestorType=local:MainView}}"><TreeView.ItemTemplate><HierarchicalDataTemplate ItemsSource="{Binding Children}"><Border><TextBlock Text="{Binding Path=Name}"/></Border></HierarchicalDataTemplate></TreeView.ItemTemplate></TreeView></WrapPanel>

Nuget[1]Install-Package WPFDevelopers.Minimal

d5c466878465590a27df2617e88674c4.gif

[2][3]

参考资料

[1]

Nuget: https://www.nuget.org/packages/WPFDevelopers.Minimal/

[2]

GitHub: https://github.com/WPFDevelopersOrg

[3]

Gitee: https://gitee.com/WPFDevelopersOrg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML Animation 【前端就业课 第二阶段】CSS 零基础到实战(06)

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 一、Animation 基础 使用 Animation 可以设置帧动画&#xff0c;与 tr…

史上最全的Visual Studio Code安装C/C++环境,若不行头砍给你。

一、下载Visual Studio Code安装 下载链接地址 二、安装C/C++插件 输入c/c++, 然后点击那里install 三、下载MinGW配置环境变量 下载地址 进入网站后不要点击 "Download Lasted Version",往下滑,找到最新版的 "x86_64-posix-seh"。

C# 11 新特性:泛型 Attribute

之前使用JsonConverterAttribute&#xff0c;我们可以为任意类型自定义 Json 序列化。例如&#xff1a;[JsonConverter(typeof(UserJsonConverter))] public class User {public string Name { get; set; }public override string ToString(){return Name;} }public class User…

NA-NP-IE系列实验实验15:RIPv2 手工汇总

实验15&#xff1a;RIPv2 手工汇总1.实验目的 通过本实验可以掌握&#xff1a;&#xff08;1&#xff09;RIPv2 路由的手工汇总&#xff08;2&#xff09;RIPv2 不支持CIDR 汇总&#xff08;3&#xff09;RIPv2 可以传递CIDR 汇总2.拓扑结构 实验拓扑如图 所示。3.实验步骤 路由…

CSS3 做一个旋转的立体3D正方形 动效核心【前端就业课 第二阶段】CSS 零基础到实战(07)

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 一、transform-origin transform-origin 用于更改当前元素的中心点&am…

【微服务专题之】.Net6下集成微服务网关-Ocelot

微信公众号&#xff1a;趣编程ACE关注可了解更多的.NET日常实战开发技巧&#xff0c;如需源码 请公众号后台留言 源码;[如果觉得本公众号对您有帮助&#xff0c;欢迎关注].Net6下集成微服务网关-Ocelot网关常见功能1&#xff1a;路由 routing2: 请求聚合3&#xff1a;身份验证和…

ArcGIS实验教程——实验二十七:时态数据可视化----以飓风路径为例

实验效果预览: ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 1. 时态数据简介2. 时态数据的存储方式3. 时态数据显示实例---飓风路径1. 时态数据简介 时态数据 代表某个时间点的状态,如 1990 年香港的土地利用状况或 2009 年 7 月…

02 控制器《ThinkPHP6 入门到电商实战》

文章目录&#xff08;更新中…&#xff09; 01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》 02 控制器《ThinkPHP6 入门到电商实战》 03 数据库查询、模型查询、多库查询《ThinkPHP6 入门到电商实战》 04 tp6 的查数据《ThinkPHP6 入门到电商实战》 05 tp6 的数据添…

聊聊C# CLR中那些大量的友元函数,友元类的底层玩法

一&#xff1a;理解友元 如果你看过 CLR 代码就会发现这里面有很多的 friend 修饰符, 比如: MethodTable.cpp 文件下。class MethodTable {/************************************* FRIEND FUNCTIONS************************************/// DO NOT ADD FRIENDS UNLESS ABSOL…

【详细】长按APP图标弹出快捷方式,ShortCut功能实现

Shortcuts介绍 Android7.1&#xff08;API Level 25&#xff09;及以上系统可以自定义Shortcuts&#xff0c;通过在桌面上长按App Icon弹出Shortcut列表&#xff0c;点击某个shortcut可使用户快捷得打开App里常用的或推荐的任务。国内各个厂商基本上在安卓8.0上集成了该功能。…

ArcGIS实验教程——实验二十八:统计图表(饼状图、柱状图)制作

统计图表(饼状图、柱状图)预览: ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 1. 制作图表2. 在地图上显示图表1. 制作图表 加载甘肃行政区划数据。 打开数据的属性表,可以看到有面积、人口、GDP、土地利用等字段。

01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》

本机环境&#xff1a;win10 集成环境&#xff1a;studyphp&#xff08;方便学习使用Windows下集成环境&#xff09; 数据库可视化操作软件&#xff1a;sqlyog 文章目录&#xff08;更新中…&#xff09; 01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》 02 控制器《…

一个Dapr的POC应用

开源了之前开发的一个Dapr的POC应用。地址在&#xff1a;https://github.com/heavenwing/daprapps-poc是以一个供应链的系统&#xff08;的一部分业务&#xff09;作为场景。POC场景很简单&#xff1a;管理部分基础数据实现简单的入库流程&#xff0c;包括申请-收货-入库整个架…

ArcGIS实验教程——实验二十九:ArcGIS制图掩膜工具案例详解

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 实验目录 1. ArcGIS掩膜概述2. 死胡同掩膜3. 要素轮廓线掩膜4. 交叉图层掩膜1. ArcGIS掩膜概述 掩膜是利用遮盖或隐藏要素的视觉处理技术来增强地图表现力的一种技术手段,掩膜实质是包含一些多边…

03 数据库查询、模型查询、多库查询《ThinkPHP6 入门到电商实战》

文章目录&#xff08;更新中…&#xff09; 01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》 02 控制器《ThinkPHP6 入门到电商实战》 03 数据库查询、模型查询、多库查询《ThinkPHP6 入门到电商实战》 04 tp6 的查数据《ThinkPHP6 入门到电商实战》 05 tp6 的数据添…

使用开源工具 k8tz 优雅设置 Kubernetes Pod 时区

容器在主机的内核上运行&#xff0c;并获得时钟&#xff0c;但时区不是来自内核&#xff0c;而是来自用户空间。在大多数情况下&#xff0c;默认使用协调世界时 (UTC)。时区的不一致&#xff0c;会带来很多困扰。即使代码与时区无关&#xff0c;但容器日志与系统日志时间相关联…

04 tp6 的查数据 find、select、findOrEmpty、findOrFail、toArray、selectOrFail、value、column《ThinkPHP6 入门到电商实战》

文章目录&#xff08;更新中…&#xff09; 01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》 02 控制器《ThinkPHP6 入门到电商实战》 03 数据库查询、模型查询、多库查询《ThinkPHP6 入门到电商实战》 04 tp6 的查数据《ThinkPHP6 入门到电商实战》 05 tp6 的数据添…

学生信息管理系统小结

ASP.NETAccess 一、登入部分 主界面 Fm new 主界面(); string s1 "ProviderMicrosoft.Jet.OLEDB.4.0;Data Sourcestudent.mdb"; string s2 "select*from 登录信息表 where 用户名" this.ttbName.Text " and 密码 "…

05 tp6 的数据添加 助手函数、 save、insert、strict、replace、insertGetId、insertAll《ThinkPHP6 入门到电商实战》

文章目录&#xff08;更新中…&#xff09; 01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》 02 控制器《ThinkPHP6 入门到电商实战》 03 数据库查询、模型查询、多库查询《ThinkPHP6 入门到电商实战》 04 tp6 的查数据《ThinkPHP6 入门到电商实战》 05 tp6 的数据添…

VS2019如何创建C++项目?没有找到空项目(C++)完全解决方案

在使用Visual Studio 2019创建C++空项目时,没有空白项目可选,如下图所示,原因是在安装VS2019时没有选择C++对应的模块。本文讲解如何使用VS2019创建C++空项目,并使用C语言输出Hello World。 运行Visual Studio Installer,点击【修改】。 勾选【使用C++的桌面开发】,点击…