正如我在上一个(现在重复的)问题中告诉你的那样,你需要定义一个新ControlTemplate
的来实现你的目标。
备查:
在 StackOverflow 上提出重复的问题是不被社区批准的,特别是如果你问的是你自己的问题的重复。如果您不理解您的答案或觉得他们没有充分回答您的问题,您应该请答案作者在该问题中进一步解释。
现在我会离开我的肥皂盒,让你在实现目标的道路上更进一步。正如我所说,您将需要定义一个新的ControlTemplate
......没有办法解决这个问题。这样做的原因很简单 - 您想添加s 以影响在defaultTrigger
中定义的 XAML 控件,但您没有其他方法可以从 XAML 中执行此操作。ControlTemplate
那么,我们如何定义一个新的ControlTemplate
? 这真的很简单:我们只需在Template
属性中定义一些 XAML 来描述我们希望控件的外观和行为方式。请参阅我在您上一篇文章中为您提供的链接以获得帮助。此外,这是一个非常简化的示例:
<Style TargetType="{x:Type ComboBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBox}">
<Border Name="Border" CornerRadius="2" Padding="2">
<ScrollViewer Margin="0" HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto">
<ItemsPresenter />
</ScrollViewer>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Border" Property="Background" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
将此Style
应用于属性设置为的 a ComboBox
,您将看到它是红色的。现在你可能在想'那看起来不像',你是对的。那是因为为了简单起见,我只是将默认的所有 XAML 替换为稍微类似于下拉部分的部分。IsEnabled
False
ComboBox
ComboBox
ControlTemplate
您现在的工作是定义您自己ControlTemplate
的复制默认 XAML 并添加Trigger
我在本文和上一篇文章中向您展示的相关 s。在示例中,请注意如何将Trigger.TargetName
设置为Border
,这是使用的内部Border
控制的名称。您需要为每个要着色的元素执行此操作。
这是控件默认设置的ControlTemplate
链接ComboBox
。当你看到它有多大时,你就会明白为什么我在示例中没有使用它。
组合框样式和模板