Элегантно переопределить стиль ToggleButton ComboBox в WPF

У меня есть вопрос относительно того, как элегантно переопределить произвольный элемент глубоко внутри визуального дерева элемента управления. Я также попытался решить ее несколькими различными способами, но у меня было несколько проблем с каждой. Обычно, когда я пробую три разных пути и терплю неудачу на каждом из них, я спускаюсь вниз, пью кофе и спрашиваю кого-то умнее меня. И вот я здесь.

Особенности:

Я хочу сгладить стиль поля со списком, чтобы он не привлек к себе внимание. Я хочу, чтобы он был похож на FlatStyle от Windows.Forms.ComboBox. Я хочу, чтобы он выглядел одинаково на Windows 7 и XP.

Главным образом, я хочу изменить внешний вид ToggleButton ComboBox.

Я мог бы просто использовать Blend, вырвать кишки шаблона управления и вручную изменить их. Это звучит не очень аппетитно для меня.

Я попытался использовать стиль для переопределения фона ToggleButton, но оказалось, что весь элемент управления ComboBox на самом деле является фронтом для ToggleButton.

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ComboBoxExpiriment2.MainWindow"
x:Name="Window"
xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="204" Height="103">
<Grid x:Name="LayoutRoot">
    <ComboBox HorizontalAlignment="Left" Margin="32,26.723,0,0" Width="120" VerticalAlignment="Top" Height="21.277">
    <ComboBox.Style>
      <Style>
        <Setter Property="ToggleButton.Background" Value="Green" />
      </Style>
    </ComboBox.Style>
    </ComboBox>
</Grid>

Поэтому я сдался и разорвал его, используя Blend. Я обнаружил, что на самом деле это стиль с именем ComboBoxTransparentButtonStyle с целевым типом ToggleButton. Стиль устанавливает шаблон ControlTemplate, который использует DockPanel с типом «Microsoft_Windows_Themes: ClassicBorderDecorator», установленным справа, иэто что мы на самом деле пытаемся контролировать. (Ты со мной так далеко?)
Вот картинка:

<Style x:Key="ComboBoxTransparentButtonStyle" TargetType="{x:Type ToggleButton}">
                <Setter Property="MinWidth" Value="0"/>
                <Setter Property="MinHeight" Value="0"/>
                <Setter Property="Width" Value="Auto"/>
                <Setter Property="Height" Value="Auto"/>
                <Setter Property="Background" Value="Transparent"/>
                <Setter Property="BorderBrush" Value="{x:Static Microsoft_Windows_Themes:ClassicBorderDecorator.ClassicBorderBrush}"/>
                <Setter Property="BorderThickness" Value="2"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ToggleButton}">
                            <DockPanel SnapsToDevicePixels="true" Background="{TemplateBinding Background}" LastChildFill="false">
                                <Microsoft_Windows_Themes:ClassicBorderDecorator x:Name="Border" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" DockPanel.Dock="Right" Background="Green" BorderBrush="{TemplateBinding BorderBrush}" BorderStyle="None" BorderThickness="{TemplateBinding BorderThickness}">
                                    <Path Fill="{TemplateBinding Foreground}" HorizontalAlignment="Center" VerticalAlignment="Center" Data="{StaticResource DownArrowGeometry}"/>
                                </Microsoft_Windows_Themes:ClassicBorderDecorator>
                            </DockPanel>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsChecked" Value="true">
                                    <Setter Property="BorderStyle" TargetName="Border" Value="AltPressed"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/>
                    </Trigger>
                </Style.Triggers>
            </Style>

Arg. Разве WPF не взрыв?

Поэтому я извлек стиль ComboBoxTransparentButtonStyle и поместил его в приложение другого проекта. Проблема в том, что я не могу применить этот стиль к ComboBox, потому что у стиля, который я извлек, есть targetType ToggleButton, поэтому TargeTypes не совпадают.

tl; доктор, как бы вы, ребята, сделали это?

Ответы на вопрос(2)

Ваш ответ на вопрос