WPF新手之如何自定义TreeView点击后的背景色

转载自csdn:WPF新手之如何自定义TreeView点击后的背景色

其它控件也同样适用:

对于一时找不出好办法的情况,直接用StyleSnooper找到所需的控件,查看它的默认Style。然后找到所需的设置,如这里是找到

[xhtml] view plaincopy

 1     <Trigger Property="TreeViewItem.IsSelected">
 2                             <Setter Property="Panel.Background" TargetName="Bd">
 3                                 <Setter.Value>
 4                                     <DynamicResource ResourceKey="{x:Static SystemColors.HighlightBrushKey}"
 5     />
 6                                     </Setter.Value>
 7                                 </Setter>
 8                             <Setter Property="TextElement.Foreground">
 9                                 <Setter.Value>
10                                     <DynamicResource ResourceKey="{x:Static
11     SystemColors.HighlightTextBrushKey}" />
12                                     </Setter.Value>
13                                 </Setter>
14                             <Trigger.Value>
15                                 <s:Boolean>
16                                     True</s:Boolean>
17                                 </Trigger.Value>
18                             </Trigger>
19     <MultiTrigger>
20                                     <MultiTrigger.Conditions>
21                                         <Condition Property="TreeViewItem.IsSelected">
22                                             <Condition.Value>
23                                                 <s:Boolean>
24                                                     True</s:Boolean>
25                                             </Condition.Value>
26                                         </Condition>
27                                         <Condition Property="Selector.IsSelectionActive">
28                                             <Condition.Value>
29                                                 <s:Boolean>
30                                                     False</s:Boolean>
31                                             </Condition.Value>
32                                         </Condition>
33                                     </MultiTrigger.Conditions>
34                                     <Setter Property="Panel.Background" TargetName="Bd">
35                                         <Setter.Value>
36                                             <DynamicResource ResourceKey="{x:Static
37     SystemColors.ControlBrushKey}" />
38                                         </Setter.Value>
39                                     </Setter>
40                                     <Setter Property="TextElement.Foreground">
41                                         <Setter.Value>
42                                             <DynamicResource ResourceKey="{x:Static
43     SystemColors.ControlTextBrushKey}" />
44                                         </Setter.Value>
45                                     </Setter>
46                                 </MultiTrigger>  

这是当项被选中之时的触发器。现在只要把对应的值{x:Static SystemColors.HighlightBrushKey}在Style.Resources中重新定义即可:

[xhtml] view plaincopy

1     <Style.Resources>
2                     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="PapayaWhip"/>
3                     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="PapayaWhip"/>
4                     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
5                 </Style.Resources>  

两个注意点:
①原来Style中可能会有自定义的Resources,也许是出于完备性的考虑,其实并没有内容

[xhtml] view plaincopy

1     <Style.Resources>
2                         <ResourceDictionary />
3                         </Style.Resources>  

这个需要把它删除,因为只能出现一处。

②可能需要在Windows中加入命名空间
xmlns:s="clr-namespace:System;assembly=mscorlib"

但是尚有两个问题未决:

①由于默认Style中很多地方相互引用,因此往往需要把整个Style全部拷贝过来(也许我水平高了以后可以不这样)

②由于①的原因,TreeViewItem前面的小三角失去了效果。

PS:学后记:其实根本不用这么麻烦,只要找到默认Style中的值,在Resources中将相应的值进行重新定义即可:

[xhtml] view plaincopy

 1     <Grid.Resources>
 2                 <Style TargetType="TreeViewItem">
 3                     <Style.Resources>
 4                         <!--SelectedItem with focus-->
 5                         <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue" Opacity=".2"/>
 6                         <!--SelectedItem without focus-->
 7                         <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightBlue" Opacity=".2"/>
 8                     </Style.Resources>
 9                 </Style>
10             </Grid.Resources>  

时间: 2024-10-21 04:37:37

WPF新手之如何自定义TreeView点击后的背景色的相关文章

WPF Step By Step 自定义模板

WPF Step By Step 自定义模板 回顾 上一篇,我们简单介绍了几个基本的控件,本节我们将讲解每个控件的样式的自定义和数据模板的自定义,我们会结合项目中的具体的要求和场景来分析,给出我们实现的方案和最终的运行效果. 本文大纲 1.控件模板及数据模板 2.ListBox深度定制模板. 3.TreeView高级模板使用实例. 控件模板及数据模板 控件模板 什么是控件模板,指定可以在控件的多个实例之间共享 Control 的可视结构和性能方面的方面.控件模板其实就是我们在可视方面的自定义模板

wpf自定义控件中使用自定义事件

wpf自定义控件中使用自定义事件 1 创建自定义控件及自定义事件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36     /// <summary>     /// 演示用的自定义控件     /// </summary>     public class ExtButton : Button     {         public

WPF中使用WindowChrome自定义窗口中遇到的最大化问题

原文:WPF中使用WindowChrome自定义窗口中遇到的最大化问题 FrameWork 4.5 之后,内置了WindowChrome类,官方文档: https://msdn.microsoft.com/en-us/library/system.windows.shell.windowchrome.aspx 如果你是旧版本,可以去搜索单独的dll. 上方的页面,解释和例子也都是旧版本的,如果新版本,比如和我一样,是4.6.2,可以继续往下看新的用法,相比文档中的旧方式,新的用法的确更简单有效了

CSS实现按钮点击后根据背景色加深效果-一颗优雅草bigniu

具体代码如下 button{ position: relative; } button:active::before { display: block; content: ''; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; background: rgba(0, 0, 0, 5%) } 如果是自定义DIV也是可以用同样方法的,可以改为 .btn{ position: relative; } /**这里的a

WPF DataGrid动态生成列的单元格背景色绑定

原文:WPF DataGrid动态生成列的单元格背景色绑定 <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Column.DisplayIndex}" Value="1"> <Setter Property="Background" Value="{Binding RelativeSource={RelativeSour

WPF 自定义列表筛选 自定义TreeView模板 自定义ListBox模板

有很多项目,都有数据筛选的操作.下面提供一个案例,给大家做参考. 左侧是数据源,搜索框加TreeView控件,右侧是ListBox控件.在左侧数据列点击添加数据,然后点击确定,得到所筛选的数据. 下面直接看代码吧,比较好理解~ 筛选控件做成用户控件,当然也可以直接放在主界面,如果不复用的话.数据源都是固定的,实际用的话,新建个ViewModel将数据源绑定就行了. 1.筛选控件界面: <UserControl x:Class="WpfApplication17.SelectControl&

WPF打印原理,自定义打印

一.基础知识 1.System.Printing命名空间 我们可以先看一下System.Printing命名空间,东西其实很多,功能也非常强大,可以说能够控制打印的每一个细节,曾经对PrintDialog失望的我看到了一丝曙光. 2.PrintDialog 可以看到PrintDialog除了构造函数有三个方法和一堆属性,PrintDocument接受一个分页器(DocumentPaginator,稍后介绍),PrintVisual可以打印Visual,也就是WPF中的大部分继承自Visual类的

[02]WPF异步响应,自定义事件、委托——多线程处理

题记 在编写有GUI的程序时,会遇到这样一种情形:用户点击了一个按钮,程序处理这个事件,然而这个处理过程耗时间较长.我们不想让软件卡在这里,而是让用户可以继续使用其他的软件功能.这种问题可以用多线程的事件响应来解决.这里,我就WPF的多线程事件响应做一个简单的归纳. 一.简单的异步的事件响应 在WPF中,针对简单的多线程处理过程,我们可以使用.NET自带的BackgroundWork完成.BackgroundWork的处理过程就是异步的,不会让用户界面停止响应. using System.Com

自定义TREEVIEW UL无限极嵌套

背景:做一个多级图片分类管理,当然要用到TreeView,在asp.net中已经提供了此服务器控件,参照效果,自定义一个简单可控性高的就当做练手吧! 效果:如图,小图标 折叠 展开    ico-treeview-1.png   ico-treeview-2.png HTML:    <div class="container mt30">        <ul class="tree">            <li><i