当鼠标悬停在我的ComboBox上时,我的ComboBox的背景会产生一对可怕的蓝色/浅蓝色。 我在这里尝试了解决方案:ComboBox Mouse over color,WPF Combobox Mouse Over,How to style ComboBox Background on Mouse Hover?或WPF combobox default hover color on togglebutton,但它没有改变任何内容,我仍然在悬停时获得默认颜色。< / p>
有什么建议吗?
提前谢谢大家, Demasiado。
以下是XAML代码:
<Window x:Class="Homepage.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<Window.Resources>
<Storyboard x:Key="TileZoomIn">
<ThicknessAnimation Storyboard.TargetProperty="Margin" From="10" To="1" Duration="0:0:0.1"/>
</Storyboard>
<Storyboard x:Key="TileZoomOut">
<ThicknessAnimation Storyboard.TargetProperty="Margin" From="1" To="10" Duration="0:0:0.1"/>
</Storyboard>
<DropShadowEffect x:Key="DropShadowEffect" BlurRadius="20" Opacity="1" ShadowDepth="0" Color="White"/>
</Window.Resources>
<Grid ShowGridLines="True">
<ComboBox Name="comboBoxTRIG" FontSize="40" Width="210" Height="98" HorizontalAlignment="Left" HorizontalContentAlignment="Center" Margin="40,-180,0,256" Background="Transparent" BorderBrush="Transparent" Foreground="White" BorderThickness="0">
<ComboBox Margin="25" Width="130" Height="50">
<ComboBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/>
</ComboBox.Resources>
</ComboBox>
</ComboBox>
</Grid>
</Window>
答案 0 :(得分:3)
你的问题来自ToggleButton模板中的ButtonChrome。从ToggleButton中删除它。
ComboBox -> ToggleButton -> ButtonChrome
步骤:
1)打开Expression Blend并编辑ComboBox样式的副本,这将为您提供ComboBox的样式+它的模板及其所有的TemplateParts,其中包括有问题的ToggleButton。
2)找到ToggleButton,它的 Style 名为“ComboBoxReadonlyToggleButton”。
3)在“ComboBoxReadonlyToggleButton”中用边框替换主题:ButtonChrome (如下面第3段代码所示。)
ComboBox的默认模板(简体!):
<ControlTemplate TargetType="{x:Type ComboBox}">
<Grid x:Name="MainGrid" SnapsToDevicePixels="true">
<Popup x:Name="PART_Popup">
.....
</Popup>
<ToggleButton Style="{StaticResource ComboBoxReadonlyToggleButton}"/>
<ContentPresenter ... />
</Grid>
</ControlTemplate>
切换按钮样式+模板(简化!)。
<Style x:Key="ComboBoxReadonlyToggleButton" TargetType="{x:Type ToggleButton}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Themes:ButtonChrome x:Name="Chrome" ....>
<Grid>
<Path x:Name="Arrow" />
</Grid>
</Themes:ButtonChrome>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您需要做的是覆盖默认的ComboBox模板,并通过将BorderChrome替换为Border来编辑切换按钮的样式:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
<Grid>
<Path x:Name="Arrow" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
答案 1 :(得分:2)
您可以覆盖SystemColors.HighlightBrushKey
范围内的ComboBox
:
<ComboBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/>
</ComboBox.Resources>
整个XAML可以是这样的:
<Grid>
<ComboBox Margin="25" Width="130" Height="50">
<ComboBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/>
</ComboBox.Resources>
<ComboBox.ItemsSource>
<Binding Path="Collection" Source="{StaticResource viewmodel}"/>
</ComboBox.ItemsSource>
</ComboBox>
</Grid>
您的评论的后续内容:
忽略您应该使用自己的viewmodel
和我的ItemSource
,这只是为了演示。
关于
的评论我无法正常工作
我建议您创建一个新项目并仅测试此XAML(当然还有您的ItemSource)并查看是否可以获得所需的结果。 当你得到它时,你可以移动到你的真实项目,看看样式在哪里发生变化以及问题出在哪里。
编辑#2:
为了更改ToggleButton
的颜色,我认为最好覆盖整个ComboBox
样式。
我使用了
<ControlTemplate x:Key="ComboBoxToggleButton"
TargetType="{x:Type ToggleButton}">
其余代码和样式取自here。
我建议你也阅读this。
答案 2 :(得分:0)
测试项目中我的ComboBox中没有任何项目。我只是将鼠标悬停在它上面,整个控件都是蓝色的。 这是.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication1
{
/// <summary>
/// Logique d'interaction pour MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
这是xaml:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ComboBox Name="comboBoxTRIG" FontSize="40" Width="210" Height="98" HorizontalAlignment="Left" HorizontalContentAlignment="Center" Margin="42,38,0,184" Background="Red" BorderBrush="Transparent" Foreground="White" BorderThickness="0">
<ComboBox Width="130" Height="50">
<ComboBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/>
</ComboBox.Resources>
</ComboBox>
</ComboBox>
</Grid>
</Window>
答案 3 :(得分:0)
在窗口资源中重新定义您的comboxItem模板
<Style TargetType="{x:Type ComboBoxItem}"
BasedOn="{StaticResource {x:Type ComboBoxItem}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBoxItem}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Margin="{TemplateBinding Margin}"
Padding="{TemplateBinding Padding}">
<ContentPresenter Margin="{TemplateBinding Margin}"
VerticalAlignment="{TemplateBinding VerticalAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background"
Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>