C# WPF实现动画渐入暗黑明亮主题切换效果

这篇具有很好参考价值的文章主要介绍了C# WPF实现动画渐入暗黑明亮主题切换效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C# WPF实现动画渐入暗黑明亮主题切换效果

效果图如下

C# WPF实现动画渐入暗黑明亮主题切换效果,WPF开发心得,c#,wpf,开发语言
最近在Bilibili的桌面端看到一个黑白主题切换的效果感觉,挺有意思。于是我使用WPF尝试实现该效果。
主要的切换效果,基本实现不过还存在一些小瑕疵,比如字体等笔刷不能跟随动画进入进行切换。因为Bilibili的客户端是用electron写的,前端使用的html,css确实太强了,这咱只能佩服。

实现思路

在文末已付上代码的地址

  1. UI使用三段式的布局,那么第一列和第三列可以使用白色或黑色来进行主题底色的实现。而第二列则使用一个带透明度的灰色进行覆盖底色

  2. 切换主题时,需要两部分操作,一是切换底色,二是切换文本等前景色的资源字典。因此我准备了三个资源字典进行主题切换。Main用于存储不变的笔刷资源,Light和Dark分别保存在明亮和暗黑两种状态下显示不同的资源。
    C# WPF实现动画渐入暗黑明亮主题切换效果,WPF开发心得,c#,wpf,开发语言
    C# WPF实现动画渐入暗黑明亮主题切换效果,WPF开发心得,c#,wpf,开发语言
    C# WPF实现动画渐入暗黑明亮主题切换效果,WPF开发心得,c#,wpf,开发语言

  3. 切换底色,如果使用切换字典的方式,则无法实现动态效果,于是,我在底图层下使用一个圆形的绘图,并在切换动作时进行简单的缩放动画即可(此处,我使用DataTrigger与切换按钮的状态进行绑定,在状态改变时触发动画效果)

   <Ellipse Grid.ColumnSpan="3" Fill="#202020" RenderTransformOrigin="0.5,0.5" Margin="30" 
                 HorizontalAlignment="Left" VerticalAlignment="Bottom" Width="1" Height="1">
            <Ellipse.RenderTransform>
                <TransformGroup>
                    <ScaleTransform x:Name="BackEllipseScale"/>
                </TransformGroup>
            </Ellipse.RenderTransform>

            <Ellipse.Style>
                <Style TargetType="Ellipse">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=ThemeToggle,Path=IsChecked}" Value="True">
                            <Setter Property="Visibility" Value="Visible"/>
                            <DataTrigger.EnterActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation Duration="0:0:0.5" To="3500" Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX">
                                            <DoubleAnimation.EasingFunction>
                                                <CubicEase EasingMode="EaseOut"/>
                                            </DoubleAnimation.EasingFunction>
                                        </DoubleAnimation>
                                        <DoubleAnimation Duration="0:0:0.5" To="3500" Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY">
                                            <DoubleAnimation.EasingFunction>
                                                <CubicEase EasingMode="EaseOut"/>
                                            </DoubleAnimation.EasingFunction>
                                        </DoubleAnimation>
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.EnterActions>
                            <DataTrigger.ExitActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation Duration="0:0:0.5" To="0" Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX">
                                            <DoubleAnimation.EasingFunction>
                                                <CubicEase EasingMode="EaseOut"/>
                                            </DoubleAnimation.EasingFunction>
                                        </DoubleAnimation>
                                        <DoubleAnimation Duration="0:0:0.5" To="0" Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY">
                                            <DoubleAnimation.EasingFunction>
                                                <CubicEase EasingMode="EaseOut"/>
                                            </DoubleAnimation.EasingFunction>
                                        </DoubleAnimation>
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.ExitActions>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Ellipse.Style>
        </Ellipse>
  1. 切换前景色,这个就比较简单了,使用基础的更改资源字典即可。(当前使用的资源都需要是 DynamicResource)
     private void ThemeToggle_Checked(object sender, RoutedEventArgs e)
        {
            SwitchTheme(true);
        }

        private void ThemeToggle_Unchecked(object sender, RoutedEventArgs e)
        {
            SwitchTheme(false);
        }
public void SwitchTheme(bool isDark)
        {
            var res = Application.Current.Resources.MergedDictionaries;
            ResourceDictionary dictionary = new ResourceDictionary();
            dictionary.Source = new Uri(isDark ? "./Dark.xaml" : "./Light.xaml", UriKind.Relative);
            res[1] = dictionary;
        }

项目地址:github文章来源地址https://www.toymoban.com/news/detail-568258.html

到了这里,关于C# WPF实现动画渐入暗黑明亮主题切换效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#实现3D模型的动画效果和交互设计

    介绍3D模型动画效果和交互功能的概念和作用 介绍3D模型动画效果和交互功能的概念和作用: 3D模型动画效果是指通过对3D模型进行动态的变化和运动,使其呈现出生动的效果,增强用户的视觉体验。交互功能则是指用户可以通过操作3D模型来实现一些特定的功能,例如旋转、

    2024年02月08日
    浏览(41)
  • Android打造丝滑的Activity recreate重建(主题切换)过渡动画

    当应用程序支持多种语言或主题时,切换语言或主题通常需要重新启动 Activity 以重新加载配置。虽然 recreate 是一种常用的重建 Activity 方法,但它不支持像在 Activity 之间切换时那样使用过渡动画。特别是在切换 浅色/深色 主题时,由于缺乏过渡动画而显得很生硬。为了提升改

    2024年02月22日
    浏览(33)
  • C# WPF 开源主题 HandyControl 的使用(一)

    HandyControl是一套WPF控件库,它几乎重写了所有原生样式,同时包含80余款自定义控件(正逐步增加),下面我们开始使用。 1.1 创建项目 C#  WPF应用(.NET Framework)创建项目 1.2 添加包 1.3  在App.xaml中引用HandyControl的皮肤和主题: 1.4 窗体文件xaml添加引用 xmlns:hc=\\\"https://handyorg.gi

    2024年02月13日
    浏览(24)
  • 【动画进阶】有意思的 Emoji 3D 表情切换效果

    最近,群里面的同学发了这么一个非常有意思是动画效果: 原效果地址 -- CodePen Demo -- Letter Hop 当然,原效果,主要使用了 GSAP 动画库以及一个 3D 文字 JavaScript 库: 但是,这个效果,其实本身并不复杂。 本文,我们将不借助任何动画库,尝试用最简单的 CSS 和 JavaScript 代码还

    2024年02月14日
    浏览(26)
  • Vue3 Transition组件给页面切换加动画效果

    本文分享一个Vue页面组件之间切换的动画效果,主要应用在移动端设备,使用户在切换页面或者切换组件的时候交互体验感更好一些,使用的是Vue3自带的Transition组件。 先简单介绍一下 Transition 组件,来自官方介绍: Transition 是一个内置组件,这意味着它在任意别的组件中都

    2024年02月09日
    浏览(30)
  • three.js 缓动算法.easing(渐入相机动画)

    效果:淡入,靠近物体 代码:

    2024年01月19日
    浏览(36)
  • keil5编辑器主题配色美化使用(附六款暗黑主题)

    1、在软件安装目下备份以下三个文件, 更换主题只需要替换global.prop arm.prop global.prop global.prop.def 2、替换配置文件 将已经准备好的配色文件复制到UV4下替换 免费下载: 第一资源库   公众号内回复: 1231 土豪下载: https://download.csdn.net/download/qq_43445867/88064961 Theme1: Theme2: Th

    2024年02月16日
    浏览(36)
  • Vivado设置暗黑界面、自动调用自定义主题

            之前写过一个版本的自定义黑色主题,参考该文章:      Vivado 自定义暗黑色主题字体、颜色,复用自定义主题。文末附黑色主题设置文件_vivado界面颜色设置_余二曰的博客-CSDN博客         但 YeYBlackTheme 在使用过程中仍出现了不少问题,所以重新编辑了新的

    2024年02月03日
    浏览(44)
  • 前端vue可以左右滚动的切换的tabs tabs选项卡 滑动动画效果 自动宽度

    前端vue可以左右滚动的切换的tabs tabs选项卡 滑动动画效果 自动宽度, 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下:           #### 使用方法 ```使用方法 swiperTabList: [\\\"2023-06-10\\\",\\\"2023-06-11\\\",\\\"2023-06-12\\\",\\\"2023-06-13\\\",\\\"2023-06-14\\\",\\\"2023-06-15\\\"], //导航列表 swiperTabIdx:

    2024年02月08日
    浏览(36)
  • 使用C#的窗体显示与隐藏动画效果方案 - 开源研究系列文章

    今天继续研究C#的WinForm的显示动画效果。 上次我们实现了无边框窗体的显示动画效果(见博文:基于C#的无边框窗体动画效果的完美解决方案 - 开源研究系列文章 ),这次介绍的是未在任务栏托盘中窗体的显示隐藏动画效果的实现代码。 1、 项目目录; 下面是项目目录,由基本

    2024年02月14日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包