【发布时间】:2021-12-22 17:34:23
【问题描述】:
经过大量研究,我偶然发现了一种相对简单的方法,可以仅针对控件样式的特定部分,而无需使用整个控件模板。部分成功,但我需要一点帮助才能完成。
具体来说,我试图在 ComboBox 的下拉列表中覆盖滚动条的 Thumb 按钮颜色。我遇到的很酷的技术如下,它利用嵌套的 Style.Resources 来访问较低的对象...
<Style x:Key="MyComboBoxStyle" TargetType="{x:Type ComboBox}">
<Style.Resources>
<Style TargetType="ScrollViewer">
<Style.Resources>
<Style TargetType="ScrollBar">
<Setter Property="Background" Value="LightGreen" />
<Style.Resources>
<Style TargetType="Track">
<Setter Property="Cursor" Value="Cross" />
<Style.Resources>
<Style TargetType="Thumb">
<Setter Property="Background" Value="Red"/>
<Setter Property="Cursor" Value="Hand" />
</Style>
</Style.Resources>
</Style>
<Style TargetType="RepeatButton">
<Setter Property="Background" Value="Red"/>
<Setter Property="Cursor" Value="Hand" />
</Style>
</Style.Resources>
</Style>
</Style.Resources>
</Style>
</Style.Resources>
<!--- rest of ComboBox style definition follows... -->
通过使用嵌套的 Style.Resources 依次深入到复杂的控件样式树,我能够针对控件样式的特定方面,而不需要整个样式定义。
上面的 xaml 代码成功地一直向下钻到“Track”...我可以更改 Track 的边距、光标等内容。但是,我似乎无法迈向拇指的最后一步。另外,我似乎无法访问重复按钮,它应该与 Track 处于同一级别(在对象树中)。
查看 ScrollBars 的样式模板似乎表明对象树是 ScrollBar->Track->Thumb... 但我似乎遗漏了什么?
关于如何访问 Thumb 颜色的任何想法?
【问题讨论】:
标签: c# .net wpf combobox scrollbar