如何更改单选按钮边框的大小?

时间:2018-10-29 16:41:15

标签: wpf xaml

XAML:

<RadioButton Margin="15" Grid.Row="0" Grid.Column="3" Style=" {StaticResource SpeedButtonStyle}" Content="TEST"/>

样式:

<!-- Speed Button Style -->
<Style x:Key="SpeedButtonStyle" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Type ToggleButton}}">
    <Setter Property="FontSize" Value="18px"/>
    <Setter Property="FontWeight" Value="Normal"/>
    <Setter Property="Background" Value="{StaticResource SidePanelButtonBgInactive}"/>
    <Setter Property="Foreground" Value="White"/>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="{StaticResource SidePanelButtonBgActive}"/>
            <Setter Property="Foreground" Value="{StaticResource SidePanelButtonFgActive}"/>
        </Trigger>
        <Trigger Property="IsChecked" Value="True">
            <Setter Property="BorderThickness" Value="30"/>
            <Setter Property="BorderBrush" Value="White" />
            <Setter Property="Background" Value="{StaticResource SidePanelButtonBgActive}"/>
            <Setter Property="Foreground" Value="{StaticResource SidePanelButtonFgActive}"/>
        </Trigger>
    </Style.Triggers>        
</Style>

我正在尝试更改单选按钮(其样式类似于切换按钮)上边框的大小。我可以更改边框的颜色,但不能更改大小。它似乎使用的是非常薄的默认大小。

1 个答案:

答案 0 :(得分:1)

我正在使用模板化的ToggleRadioButton,可以通过将BorderThickness绑定到其模板化父级来实现它。

<Style TargetType="RadioButton" x:Key="SpeedButtonStyle">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <ControlTemplate.Resources>
                        <Style TargetType="{x:Type ToggleButton}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="{x:Type ToggleButton}">
                                        <Border Background="{TemplateBinding Background}" 
                                                BorderBrush="{TemplateBinding BorderBrush}" 
                                                BorderThickness="{TemplateBinding BorderThickness}">
                                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                        </Border>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </ControlTemplate.Resources>
                    <ToggleButton IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
                                  Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
                                  BorderThickness="{TemplateBinding BorderThickness}"
                                  BorderBrush="{TemplateBinding BorderBrush}"
                                  Foreground="{TemplateBinding Foreground}"
                                  Background="{TemplateBinding Background}">
                    </ToggleButton>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="FontSize" Value="18px"/>
        <Setter Property="FontWeight" Value="Normal"/>
        <Setter Property="Background" Value="Gray"/>
        <Setter Property="Foreground" Value="White"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Red"/>
                <Setter Property="Foreground" Value="DarkRed"/>
            </Trigger>
            <Trigger Property="IsChecked" Value="True">
                <Setter Property="BorderThickness" Value="5"/>
                <Setter Property="BorderBrush" Value="White" />
                <Setter Property="Background" Value="Green"/>
                <Setter Property="Foreground" Value="LightSeaGreen"/>
            </Trigger>
        </Style.Triggers>
    </Style>

编辑: 我认为您有完全不同的问题。在IsMouseOver或IsChecked上触发不会摆脱默认的Windows悬停颜色。因此,您必须摆脱这种情况,这是可以实现的,但要在带有边框的模板上给ToggleButton模板,然后再用样式化的ToggleButton模板对RadioButton模板。请注意,如果您想对其进行更多修改,则必须在边框以及ToggleButton中绑定它的属性。 TemplateBinding和Binding在TemplatedParent上的区别是here,而且TemplateBinding只是一种方式,因此IsChecked应该在TemplatedParent上。
现在应该可以使用了(至少对我来说,它在新项目中也是如此),只需替换颜色即可。