在不粘贴整个模板的情况下更改 WPF 中 ComboBox 的背景颜色?
Change background colour of a ComboBox in WPF without pasting entire template?
我知道你可以右击,编辑模板 > 编辑副本,粘贴整个 ComboBox 模板然后更改几行,但是真的没有办法只用几行代码更改背景吗?
我可以用这段代码实现它,但是删除了下拉菜单 arrow/menu,这基本上使它变得毫无用处。
<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
的方式,您不能简单地设置或 属性 或使用触发器创建派生样式以更改其背景颜色。这个有详细解释here.
您可以做的是在运行时以编程方式更改加载的模板元素的背景:
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 标记中并根据您的要求进行编辑。
我知道你可以右击,编辑模板 > 编辑副本,粘贴整个 ComboBox 模板然后更改几行,但是真的没有办法只用几行代码更改背景吗?
我可以用这段代码实现它,但是删除了下拉菜单 arrow/menu,这基本上使它变得毫无用处。
<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
的方式,您不能简单地设置或 属性 或使用触发器创建派生样式以更改其背景颜色。这个有详细解释here.
您可以做的是在运行时以编程方式更改加载的模板元素的背景:
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 标记中并根据您的要求进行编辑。