• wpf 自定义单选按钮 RadioButton


    新建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>

    原文:https://www.cnblogs.com/zisai/p/11050978.html 

  • 相关阅读:
    Maven项目 Struts和Spring整合
    Android Binder机制
    Android屏幕适配
    AIDL初识
    Android插件化初识
    OOM解决方案
    ANR
    Android性能优化
    Android内存泄露总结
    Glide源码解析
  • 原文地址:https://www.cnblogs.com/zisai/p/11050978.html
Copyright © 2020-2023  润新知