Как изменить размер границы переключателя? - PullRequest
0 голосов
/ 29 октября 2018

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 голосов
/ 29 октября 2018

Я использую свой шаблонный 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>

EDIT: Я думаю, что у вас была совершенно другая проблема. Триггер на IsMouseOver или IsChecked не избавляет от стандартных цветов наведения Windows. Таким образом, вы должны избавиться от этого, что достигается, но с помощью шаблона ToggleButton с рамкой поверх шаблона вашего RadioButton с помощью этого стиля ToggleButton. Обратите внимание, что если вы хотите изменить его больше, вы должны связать его свойства в Border, а также в ToggleButton. Разница между TemplateBinding и Binding на TemplatedParent составляет здесь , и, кроме того, TemplateBinding является только односторонним, поэтому IsChecked должен быть на TemplatedParent.
Это должно сработать сейчас (по крайней мере, для меня это было в новом проекте), просто замените цвета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...