根据状态设置切换按钮的背景

Setting background of a toggle button based on its state

如果 isChecked=true 或 false 并且鼠标悬停在控件上,我正在尝试将切换按钮的背景色设置为透明。这么说吧,在任何情况下。

这是我最后试过的:

<ToggleButton DockPanel.Dock="Right" Width="48" IsChecked="{Binding DownloadImages}">
<ToggleButton.Style>
    <Style TargetType="{x:Type ToggleButton}">
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="Background" Value="Aqua"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="true">
                <Setter Property="Background" Value="Red"/>
            </Trigger>
            <DataTrigger Binding="{Binding DownloadImages}" Value="True">
                <Setter Property="Background" Value="Green"/>
                <Setter Property="Content">
                    <Setter.Value>
                        <Image Style="{StaticResource ToggleOnImage}" />
                    </Setter.Value>
                </Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding DownloadImages}" Value="False">
                <Setter Property="Background" Value="Blue"/>
                <Setter Property="Content">
                    <Setter.Value>
                       <Image Style="{StaticResource ToggleOffImage}" />
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ToggleButton.Style>

遗憾的是它产生了以下结果:

这表明只有蓝色背景 setter 有效。 图像正确交换,只有 On 状态和 MouseOver 的背景保持 windows 风格的蓝色。

你知道我做错了什么吗?

在这种情况下,我不得不完全重写模板 属性,我建议大家这样做。始终自定义模板,即使您不想编辑任何内容。 xaml 一半的问题都可以解决。 并避免其他一堆代码错误:始终设置 ControlTemplate 的 TargetType。

代码:

<ToggleButton.Style>
    <Style TargetType="{x:Type ToggleButton}">
        <Setter Property="Template"/>
           <Setter.Value>
             <ControlTemplate TargetType="{x:Type ToggleButton}">
               <Grid....>