Изменение непрозрачности текста RadioButton, когда он отключен - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь изменить непрозрачность Контента RadioButton, который представляет собой некоторый текст, предположительно TextBlock.Проблема в том, что с этим текущим стилем он просто меняет непрозрачность текста, но не отображает сам переключатель.Пожалуйста, помогите.

<UserControl.Resources>
  <Style x:Key="RadioLabel" TargetType="{x:Type RadioButton}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type RadioButton}">
                    <TextBlock x:Name="RadioLabel"
                               Text="{TemplateBinding Content}" 
                               Background="{x:Null}" />
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsChecked" Value="False">
                            <Setter TargetName="RadioLabel"
                                    Property="Background" 
                                    Value="Transparent"/>
                            <Setter TargetName="RadioLabel" 
                                    Property="Opacity" 
                                    Value="0.5"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>

Это мой RadioButton

<RadioButton x:Name="rbn1" Style="{StaticResource RadioLabel}" GroupName="rbnApplication" 
             IsChecked="{Binding Path=CurrentApplicationType,
                                 Converter={StaticResource EnumComparisonConverter},
                                 ConverterParameter={x:Static utils:ApplicationType.QXManagerRegulatory}}" 
             IsEnabled="{Binding Path=CurrentApplicationType,
                                 Converter={StaticResource EnumComparisonConverter},
                                 ConverterParameter={x:Static utils:ApplicationType.QXManagerRegulatory}}" 
             Content="QX Manager Regulatory"/>

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

В общем, самый простой способ добиться этого - объявить RadioButton (или любой другой элемент управления), а затем на вкладке свойств перейти на Разное -> Шаблон, щелкнуть левой кнопкой мыши на маленькой квадратной кнопке справа и выбрать "Преобразовать в локальное значение ".Это расширит весь существующий ControlTemplate, который вы затем сможете редактировать и / или добавлять триггеры в etc:

<RadioButton x:Name="template" >
    <RadioButton.Template>
        <ControlTemplate TargetType="{x:Type RadioButton}">
            <Grid x:Name="templateRoot" Background="Transparent" SnapsToDevicePixels="True">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Border x:Name="radioButtonBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="100" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="1,1,2,1" VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
                    <Grid x:Name="markGrid" Margin="2">
                        <Ellipse x:Name="optionMark" Fill="#FF212121" MinWidth="6" MinHeight="6" Opacity="0"/>
                    </Grid>
                </Border>
                <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="1" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="HasContent" Value="True">
                    <Setter Property="FocusVisualStyle">
                        <Setter.Value>
                            <Style>
                                <Setter Property="Control.Template">
                                    <Setter.Value>
                                        <ControlTemplate>
                                            <Rectangle Margin="14,0,0,0" SnapsToDevicePixels="True" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="Padding" Value="4,-1,0,0"/>
                </Trigger>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" TargetName="radioButtonBorder" Value="#FFF3F9FF"/>
                    <Setter Property="BorderBrush" TargetName="radioButtonBorder" Value="#FF5593FF"/>
                    <Setter Property="Fill" TargetName="optionMark" Value="#FF212121"/>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Background" TargetName="radioButtonBorder" Value="#FFE6E6E6"/>
                    <Setter Property="BorderBrush" TargetName="radioButtonBorder" Value="#FFBCBCBC"/>
                    <Setter Property="Fill" TargetName="optionMark" Value="#FF707070"/>
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                    <Setter Property="Background" TargetName="radioButtonBorder" Value="#FFD9ECFF"/>
                    <Setter Property="BorderBrush" TargetName="radioButtonBorder" Value="#FF3C77DD"/>
                    <Setter Property="Fill" TargetName="optionMark" Value="#FF212121"/>
                </Trigger>
                <Trigger Property="IsChecked" Value="True">
                    <Setter Property="Opacity" TargetName="optionMark" Value="1"/>
                </Trigger>
                <Trigger Property="IsChecked" Value="{x:Null}">
                    <Setter Property="Opacity" TargetName="optionMark" Value="0.56"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </RadioButton.Template>
</RadioButton>
0 голосов
/ 25 февраля 2019

Это потому, что вы устанавливаете ControlTemplate на RadioButton.Что меняет весь ваш контроль.Вместо этого вам нужно использовать ContentTemplate, чтобы изменить Content.

Ниже Style должно работать для вашего случая.

<Style x:Key="RadioLabel" TargetType="{x:Type RadioButton}">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate DataType="{x:Type RadioButton}">
                <TextBlock x:Name="RadioLabel"
                           Text="{TemplateBinding Content}" 
                           Background="{x:Null}" />
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding Path=IsChecked, 
                                           RelativeSource={RelativeSource Mode=TemplatedParent}}" 
                                 Value="False">
                        <Setter TargetName="RadioLabel"
                                Property="Background" 
                                Value="Transparent"/>
                        <Setter TargetName="RadioLabel" 
                                Property="Opacity" 
                                Value="0.5"/>
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...