我知道你可以右键单击,编辑模板>编辑一个副本,粘贴整个组合框模板,然后更改几行,但真的没有办法在几行代码中更改背景吗?
我可以用这个代码实现它,但这消除了下拉箭头/菜单,这基本上使它毫无用处。
<Style TargetType="{x:Type ComboBox}">
<Setter Property="Background" Value="Red" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBox}">
<Border Background="{TemplateBinding Background}">
<ContentPresenter></ContentPresenter>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
恐怕你不能"覆盖";只有ControlTemplate
的一部分,并且给定ComboBox
的默认ControlTemplate
的定义方式,您不能简单地设置、属性或创建具有触发器的派生样式来更改其背景色。这将在此处详细解释。
您可以做的是在运行时以编程方式更改加载的模板元素的背景:
private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
ComboBox comboBox = (ComboBox)sender;
ToggleButton toggleButton = comboBox.Template.FindName("toggleButton", comboBox) as ToggleButton;
if (toggleButton != null)
{
Border border = toggleButton.Template.FindName("templateRoot", toggleButton) as Border;
if (border != null)
border.Background = Brushes.Yellow;
}
}
XAML:
<ComboBox Loaded="ComboBox_Loaded">
<ComboBoxItem Background="Yellow">1</ComboBoxItem>
<ComboBoxItem Background="Yellow">2</ComboBoxItem>
<ComboBoxItem Background="Yellow">3</ComboBoxItem>
</ComboBox>
另一种选择是将整个模板复制到XAML标记中,并根据需要进行编辑。