新建RadioButtonEx.cs
public class RadioButtonEx : RadioButton { public Geometry SelectIcon { get { return (Geometry)GetValue(SelectIconProperty); } set { SetValue(SelectIconProperty, value); } } // Using a DependencyProperty as the backing store for SelectIcon. This enables animation, styling, binding, etc... public static readonly DependencyProperty SelectIconProperty = DependencyProperty.Register("SelectIcon", typeof(Geometry), typeof(RadioButtonEx), new PropertyMetadata(default(Geometry))); public Brush IconColor { get { return (Brush)GetValue(IconColorProperty); } set { SetValue(IconColorProperty, value); } } // Using a DependencyProperty as the backing store for IconColor. This enables animation, styling, binding, etc... public static readonly DependencyProperty IconColorProperty = DependencyProperty.Register("IconColor", typeof(Brush), typeof(RadioButtonEx), new PropertyMetadata(Brushes.Red)); /// <summary> /// 圆角 /// </summary> public CornerRadius CornerRadius { get { return (CornerRadius)GetValue(CornerRadiusProperty); } set { SetValue(CornerRadiusProperty, value); } } // Using a DependencyProperty as the backing store for CornerRadius. This enables animation, styling, binding, etc... public static readonly DependencyProperty CornerRadiusProperty = DependencyProperty.Register("CornerRadius", typeof(CornerRadius), typeof(RadioButtonEx), new PropertyMetadata(new CornerRadius(2))); public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, value); } } // Using a DependencyProperty as the backing store for Text. This enables animation, styling, binding, etc... public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(RadioButtonEx), new PropertyMetadata("")); }
新建RadioButtonEx资源字典
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:ex="clr-namespace:HL.SelfTicket.Controls"> <PathGeometry x:Key="rdbSelect">M431.47 793.782c-11.365 0-22.332-4.378-30.589-12.286l-235.495-225.535c-17.64-16.894-18.245-44.891-1.35-62.528 16.894-17.64 44.891-18.245 62.532-1.351l201.055 192.552 364.692-443.171c15.519-18.86 43.39-21.567 62.253-6.049 18.861 15.519 21.568 43.39 6.048 62.251l-394.992 479.993c-7.821 9.504-19.248 15.319-31.534 16.047-0.874 0.052-1.748 0.078-2.621 0.078z</PathGeometry> <Style TargetType="{x:Type ex:RadioButtonEx}"> <Setter Property="Height" Value="30"/> <Setter Property="IconColor" Value="#f14253"/> <Setter Property="FontSize" Value="26"/> <Setter Property="Foreground" Value="#333"/> <Setter Property="SelectIcon" Value="{StaticResource rdbSelect}"/> <Setter Property="BorderThickness" Value="1"/> <Setter Property="BorderBrush" Value="#979797"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ex:RadioButtonEx}"> <Grid x:Name="grid" VerticalAlignment="Center"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <Border Height="{TemplateBinding Height}" Width="{TemplateBinding Height}" CornerRadius="{TemplateBinding CornerRadius}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> <Path Visibility="Collapsed" x:Name="select" Data="{StaticResource rdbSelect}" Margin="5" Fill="{TemplateBinding IconColor}" Stretch="Fill"></Path> </Border> <TextBlock Text="{TemplateBinding Text}" VerticalAlignment="Center" Margin="10,0,0,0" Foreground="{TemplateBinding Foreground}" FontSize="{TemplateBinding FontSize}"/> </StackPanel> </Grid> <!--触发器:设置选中状态符号--> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="true"> <Setter Property="Visibility" Value="Visible" TargetName="select"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </ResourceDictionary>