WPF 基础控件之 ToggleButton 样式

其他基础控件

1.Window
2.Button
3.CheckBox
4.ComboBox
5.DataGrid
6.DatePicker
7.Expander
8.GroupBox
9.ListBox
10.ListView
11.Menu
12.PasswordBox
13.TextBox
14.RadioButton

ToggleButton  实现下面的效果

58a60ece30d22dbca612130920ba571e.png

1)ToggleButton来实现动画;

  • Border嵌套 Ellipse并设置TranslateTransform ,当选中CheckedTranslateTransform.XTo = 20Ellipse从左侧移动到右侧。

  • 动画完成时将Border.Background背景色更改为深色PrimaryNormalSolidColorBrush

<ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="../Themes/Basic/ControlBasic.xaml"/>
        <ResourceDictionary Source="../Themes/Basic/Animations.xaml"/>
    </ResourceDictionary.MergedDictionaries>

    <Style TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource ControlBasicStyle}">
        <Setter Property="Focusable" Value="False" />
        <Setter Property="Cursor" Value="Hand"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToggleButton}">
                   
                    <Border x:Name="PART_Border"
                            Width="40"
                            Height="20"
                            Background="{DynamicResource BaseSolidColorBrush}"
                            CornerRadius="10">
                       
                        <Ellipse x:Name="PART_Ellipse" Width="16" Height="16"
                                 Margin="2,0"
                                 VerticalAlignment="Center" HorizontalAlignment="Left"
                                 Fill="{DynamicResource WindowForegroundColorBrush}">
                            <Ellipse.RenderTransform>
                                <TranslateTransform/>
                            </Ellipse.RenderTransform>
                        </Ellipse>
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CheckStates">
                                <VisualState x:Name="Checked">
                                    <Storyboard>
                                        <DoubleAnimation Storyboard.TargetName="PART_Ellipse"
                                                         Storyboard.TargetProperty="(Ellipse.RenderTransform).(TranslateTransform.X)" 
                                                         To="20" 
                                                         Duration="00:00:.3"
                                                         EasingFunction="{StaticResource CubicEaseInOut}"/>
                                        
                                        
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Unchecked">
                                    <Storyboard>
                                        <DoubleAnimation Storyboard.TargetName="PART_Ellipse"
                                                         Storyboard.TargetProperty="(Ellipse.RenderTransform).(TranslateTransform.X)" 
                                                         To="0" 
                                                         Duration="00:00:.3"
                                                         EasingFunction="{StaticResource CubicEaseInOut}"/>
                                    
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Indeterminate" />
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                    </Border>
                    <ControlTemplate.Triggers>
                       
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="Background" TargetName="PART_Border" 
                                    Value="{DynamicResource PrimaryNormalSolidColorBrush}"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

2)Styles.ToggleButton.xaml 代码如下;

<WrapPanel Margin="0,10">
           <ToggleButton/>
                    <ToggleButton Margin="10,0" IsEnabled="False"/>
                    <ToggleButton IsChecked="True"/>
 </WrapPanel>

Nuget Install-Package WPFDevelopers.Minimal

6e4ce89e34ea6657241243cf3ea1dba3.gif

[1][2]

参考资料

[1]

GitHub: https://github.com/WPFDevelopersOrg

[2]

Gitee: https://gitee.com/WPFDevelopersOrg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF工控软件自定义控件是指在基于.NET6框架下使用WPF MVVM进行UI设计时,开发者可以自定义控件来满足特定的功能需求。这些自定义控件可以根据项目的需求进行设计和修改,以提供更好的用户体验和功能支持。 如果你对WPF工控软件自定义控件感兴趣,我建议你可以下载并编译相关的示例代码,并尝试修改它们以适应你的项目需求。你可以在这个链接上找到相关界面的示例代码:https://blog.csdn.net/u010186391/article/details/125601226。通过实际操作和修改示例代码,你可以更好地理解和应用WPF自定义控件样式、MVVM和异步线程等方面的知识。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [NET6+WPF+MVVM ](https://download.csdn.net/download/u010186391/85926327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [C# WPF 自定义控件 滑块控件 开关控件 ToggleButton Switcher](https://blog.csdn.net/shizu11zz/article/details/120459009)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值