正如我在上一个(现在重复的)问题中告诉你的那样,你需要定义一个新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 替换为稍微类似于下拉部分的部分。IsEnabledFalseComboBoxComboBox ControlTemplate
您现在的工作是定义您自己ControlTemplate的复制默认 XAML 并添加Trigger我在本文和上一篇文章中向您展示的相关 s。在示例中,请注意如何将Trigger.TargetName设置为Border,这是使用的内部Border控制的名称。您需要为每个要着色的元素执行此操作。
这是控件默认设置的ControlTemplate链接ComboBox。当你看到它有多大时,你就会明白为什么我在示例中没有使用它。
组合框样式和模板