【问题标题】:RadioButton change background color when checked选中时 RadioButton 更改背景颜色
【发布时间】:2016-11-10 10:56:08
【问题描述】:

我想覆盖 RadioButton 样式,使其看起来像 ToggleButton 一个

<RadioButton Content="Point">
    <RadioButton.Template>
        <ControlTemplate>
            <ToggleButton IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
                          Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
            <ControlTemplate.Triggers>
                <Trigger Property="IsChecked" Value="True">
                    <Setter Property="Background" Value="Red"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </RadioButton.Template>
</RadioButton>

我需要在选中按钮时更改按钮的背景颜色。我尝试使用触发器,但它不起作用。

【问题讨论】:

    标签: wpf


    【解决方案1】:

    解决方案并不简单。该问题与切换按钮在选中时具有默认背景这一事实有关,并且必须将其删除,然后才能将其更改为其他背景。

    看看这个话题:changing background color of togglebutton when checked

    这是应该做你想做的代码(使用这个主题作为参考remove blue highlight on buttons wpf):

     <RadioButton Content="Point">
            <RadioButton.Template>
                <ControlTemplate>
                    <ToggleButton IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
                                  Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" Background="Transparent">
                        <ToggleButton.Style>
                            <Style TargetType="ToggleButton">
                                <Setter Property="OverridesDefaultStyle" Value="True"/>
                                <Setter Property="Margin" Value="5"/>
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="ToggleButton">
                                            <Border Name="border" 
                                                    BorderThickness="1"
                                                    Padding="4,2" 
                                                    BorderBrush="DarkGray" 
                                                    CornerRadius="3" 
                                                    Background="{TemplateBinding Background}">
                                                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                                            </Border>
                                            <ControlTemplate.Triggers>
                                                <Trigger Property="IsMouseOver" Value="True">
                                                    <Setter TargetName="border" Property="BorderBrush" Value="Black" />
                                                </Trigger>
                                                <Trigger Property="IsChecked" Value="true">
                                                    <Setter TargetName="border" Property="Background" Value="Red"/>
                                                </Trigger>
                                            </ControlTemplate.Triggers>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </ToggleButton.Style>
                    </ToggleButton>
                </ControlTemplate>
            </RadioButton.Template>
        </RadioButton>
    

    【讨论】:

    • 那么op只需要复制你发布的主题的控件模板替换ToogleButton即可。
    • 我已将 xaml 解决方案也添加到答案中。
    猜你喜欢
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2022-12-18
    相关资源
    最近更新 更多