Вот один из способов сделать то, что я думаю, что вы после. Я внес несколько изменений в ваш ComboBox
.
Добавлены комментарии в код Xaml, поэтому он должен быть понятен
Редактировать. Это не работало в Windows 7 из-за ButtonChrome
, который находится глубоко внутри ComboBox
Template
. Вы можете либо перепрограммировать все это, либо использовать этот обходной путь, который использует некоторый код позади.
Сначала добавьте ссылку на PresentationFramework.Aero
Затем подпишитесь на Loaded
событие ComboBox
, отключите ButtonChrome
и привяжите фон MainGrid в обработчике событий, как это
private void CmbBox1_Loaded(object sender, RoutedEventArgs e)
{
ComboBox comboBox = sender as ComboBox;
ToggleButton toggleButton = GetVisualChild<ToggleButton>(comboBox);
ButtonChrome chrome = toggleButton.Template.FindName("Chrome", toggleButton) as ButtonChrome;
chrome.RenderMouseOver = false;
chrome.RenderPressed = false;
chrome.RenderDefaulted = false;
chrome.Background = Brushes.Transparent;
Grid MainGrid = comboBox.Template.FindName("MainGrid", comboBox) as Grid;
Binding backgroundBinding = new Binding("Background");
backgroundBinding.Source = comboBox;
MainGrid.SetBinding(Grid.BackgroundProperty, backgroundBinding);
}
private static T GetVisualChild<T>(DependencyObject parent) where T : Visual
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null)
{
child = GetVisualChild<T>(v);
}
if (child != null)
{
break;
}
}
return child;
}
Xaml
<ComboBox Name="CmbBox1" BorderBrush="Black" Margin="1,1,1,1"
ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}"
Loaded="CmbBox1_Loaded"
Width="150">
<ComboBox.Resources>
<SolidColorBrush x:Key="MouseOverBrush"
Color="Red"/>
<SolidColorBrush x:Key="DropDownListBrush"
Color="Green"/>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
Color="Transparent"/>
</ComboBox.Resources>
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type ComboBox}},
Path=IsDropDownOpen}"
Value="True">
<Setter Property="Background" Value="{StaticResource DropDownListBrush}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
<ComboBox.Style>
<Style TargetType="{x:Type ComboBox}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource MouseOverBrush}"/>
</Trigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
<ComboBox.ItemTemplate>
<DataTemplate>
<Border x:Name="border" SnapsToDevicePixels="True">
<TextBlock Foreground="Black" FontSize="10" TextAlignment="Left"
FontWeight="Black" Text="{Binding}"></TextBlock>
</Border>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type ComboBoxItem}}, Path=IsMouseOver}" Value="True">
<Setter TargetName="border" Property="Background" Value="{StaticResource MouseOverBrush}"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>