我想为单选按钮添加边框,文本为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没有边框,所以也不可能为边框设置值。
有两种解决方法。
-
在只读模式下使用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>
-
由于你在面板中只有一个元素,你可以使用边框来代替。
<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>