为单选按钮添加边框,文本为isChecked



我想为单选按钮添加边框,文本为isChecked

我试过Style。扳机,但它似乎没有动作也尝试通过ControlTemplate。触发,但同时引用网格和文本框表示参数无法识别

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style BasedOn="{StaticResource {x:Type ToggleButton}}"
TargetType="{x:Type RadioButton}"
x:Key="MenuButtonTheme">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<Grid VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Background="{TemplateBinding Background}"
x:Name="GridMain">
<TextBlock Text="{TemplateBinding Property=Content}"
x:Name="ButtonText"
VerticalAlignment="Center"
Margin="20,0,0,0">
</TextBlock>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="ButtonText" Property="Margin" Value="30,0,0,0"></Setter>
<!-- <Setter TargetName="ButtonText" Property="BorderThickness" Value="5"></Setter> -->
<!-- <Setter TargetName="GridMain" Property="BorderThickness" Value="5"></Setter> -->
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="GridMain" Property="Background" Value="#424549"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Background" Value="Transparent"></Setter>
</Style.Setters>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="BorderThickness" Value="5"></Setter>
<Setter Property="BorderBrush" Value="#7289da"></Setter>
</Trigger>
</Style.Triggers>

</Style>

TextBlock没有边框,所以也不可能为边框设置值。
有两种解决方法。

  1. 在只读模式下使用TextBox代替TextBlock元素

    <ControlTemplate TargetType="RadioButton">
    <Grid VerticalAlignment="Stretch"
    HorizontalAlignment="Stretch"
    Background="{TemplateBinding Background}"
    x:Name="GridMain">
    <TextBox Text="{TemplateBinding Content}"
    x:Name="ButtonText"
    VerticalAlignment="Center"
    Margin="20,0,0,0"
    IsReadOnly="True"/>
    </Grid>
    <ControlTemplate.Triggers>
    <Trigger Property="IsChecked" Value="True">
    <Setter TargetName="ButtonText" Property="Margin" Value="30,0,0,0"></Setter>
    <Setter TargetName="ButtonText" Property="BorderThickness" Value="5"/>
    </Trigger>
    <Trigger Property="IsMouseOver" Value="True">
    <Setter TargetName="GridMain" Property="Background" Value="#424549"></Setter>
    </Trigger>
    </ControlTemplate.Triggers>
    </ControlTemplate>
    
  2. 由于你在面板中只有一个元素,你可以使用边框来代替。

    <ControlTemplate TargetType="RadioButton">
    <Border VerticalAlignment="Stretch"
    HorizontalAlignment="Stretch"
    Background="{TemplateBinding Background}"
    x:Name="GridMain">
    <TextBlock Text="{TemplateBinding Property=Content}"
    x:Name="ButtonText"
    VerticalAlignment="Center"
    Margin="20,0,0,0">
    </TextBlock>
    </Border>
    <ControlTemplate.Triggers>
    <Trigger Property="IsChecked" Value="True">
    <Setter TargetName="ButtonText" Property="Margin" Value="30,0,0,0"></Setter>
    <Setter TargetName="GridMain" Property="BorderThickness" Value="5"/>
    </Trigger>
    <Trigger Property="IsMouseOver" Value="True">
    <Setter TargetName="GridMain" Property="Background" Value="#424549"></Setter>
    </Trigger>
    </ControlTemplate.Triggers>
    </ControlTemplate>
    

最新更新