• (WPF)简单的方法来创建一个动画/平滑滚动条


    介绍 看见…… 平滑的滑动,动画滚动条!辉煌! !不是吗? ! 也许你们很多人都有这样的想法,然后你们就去了谷歌it! 当然,您认为在WPF中制作这样的东西应该很容易! …在经历了一些可悲和绝望的时刻后,你将面对一个未知的世界:混乱的代码、随机的答案、新的控制器和……! 好吧,不要放弃!还有一种非常简单的方法来创建一个完美的形状! 结果/ GIF 30fps 为什么现在不应该使用自定义控件? 如果你是专家: 忘记它!是的,我只是在开玩笑:你可以建立任何你想要的! 一个自定义控制,甚至一个连环杀手机器人Rexter!: D 如果你不是专家: 所有的主题都挂载在WPF的一个特定资源上,如果你创建自己的自定义控件,它不支持常规资源,你必须自己一个一个地添加它们! 创建基地 首先,创建一个窗口,应用你的主题(mahapps, materialDesign, ModernUI等)。 //我使用我的自定义主题 窗口XAML 隐藏,收缩,复制Code

    <Windowx:Class="Tutorial_Projects.SmoothScroll_Window"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:Tutorial_Projects"Title="Easiest Way to Create a Animated/Smoothed Scroll Bar | 
                   By NeoTrix2000"Height="338.866"Width="553.846"ResizeMode="NoResize"WindowStartupLocation="CenterScreen">
        
    <GridBackground="#FF232323">
            <ScrollViewerMargin="0">
                <RichTextBoxForeground="#FF959595"BorderBrush="{x:Null}"Background="#FF212121"IsReadOnly="True"IsHitTestVisible="False">
                    <FlowDocument>
                        <Paragraph>
                            <RunForeground="#FF0E95AA"FontWeight="Bold"FontSize="18"/>
                        </Paragraph>
                        <Paragraph>
                            <RunForeground="#FF0E95AA"FontWeight="Bold"FontSize="18"Text="Sed ut perspiciatis unde omnis iste natus 
                             error sit voluptatem accusantium doloremque"/>
                        </Paragraph>
                        <Paragraph>
                            <RunForeground="#FF0E95AA"FontWeight="Bold"FontSize="18"Text=" "/>
                            <RunText="laudantium, totam rem aperiam, 
                             eaque ipsa quae ab illo inventore veritatis et quasi architecto 
                             beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia 
                             voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur 
                             magni dolores eos qui ratione voluptatem sequi nesciunt. 
                             Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, 
                             consectetur, adipisci velit, sed quia non numquam eius modi tempora 
                             incidunt ut labore et dolore magnam aliquam quaerat voluptatem. 
                             Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis 
                             suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? 
                             Quis autem vel eum iure reprehenderit qui in ea voluptate velit 
                             esse quam nihil molestiae consequatur, vel illum qui dolorem eum 
                             fugiat quo voluptas nulla pariatur? At vero eos et accusamus et 
                             iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum 
                             deleniti atque corrupti quos dolores et quas molestias excepturi 
                             sint occaecati cupiditate non provident, similique sunt in culpa 
                             qui officia deserunt mollitia animi, id est laborum et dolorum fuga. 
                             Et harum quidem rerum facilis est et expedita distinctio. 
                             Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil 
                             impedit quo minus id quod maxime placeat facere possimus, 
                             omnis voluptas assumenda est, omnis dolor repellendus. 
                             Temporibus autem quibusdam et aut officiis debitis aut rerum 
                             necessitatibus saepe eveniet ut et voluptates repudiandae sint 
                             et molestiae non recusandae. Itaque earum rerum hic tenetur a 
                             sapiente delectus, ut aut reiciendis voluptatibus maiores alias 
                             consequatur aut perferendis doloribus asperiores repellat. 
                             Sed ut perspiciatis unde omnis iste natus error sit "/>
                        </Paragraph>
                        <Paragraph>
                            <RunText="voluptatem accusantium doloremque laudantium, 
                            totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et 
                            quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam 
                            voluptatem quia voluptas sit aspernatur aut odit aut fugit, 
                            sed quia consequuntur magni dolores eos qui ratione 
                            voluptatem sequi nesciunt. 
                            Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, 
                            consectetur, adipisci velit, 
                            sed quia non numquam eius modi tempora incidunt 
                            ut labore et dolore magnam aliquam quaerat voluptatem. 
                            Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis 
                            suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? 
                            Quis autem vel eum iure reprehenderit qui in ea voluptate velit 
                            esse quam nihil molestiae consequatur, vel illum qui dolorem eum 
                            fugiat quo voluptas nulla pariatur? At vero eos et accusamus et 
                            iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum 
                            deleniti atque corrupti quos dolores et quas molestias excepturi sint 
                            occaecati cupiditate non provident, similique sunt in culpa qui 
                            officia deserunt mollitia animi, id est laborum et dolorum fuga. 
                            Et harum quidem rerum facilis est et expedita distinctio. 
                            Nam libero tempore, cum soluta nobis est eligendi optio 
                            cumque nihil impedit quo minus id quod maxime placeat facere possimus, 
                            omnis voluptas assumenda est, omnis dolor repellendus. 
                            Temporibus autem quibusdam et aut officiis debitis aut rerum 
                            necessitatibus saepe eveniet ut et voluptates repudiandae sint 
                            et molestiae non recusandae. Itaque earum rerum hic tenetur 
                            a sapiente delectus, ut aut reiciendis voluptatibus "/>
                        </Paragraph>
                        <Paragraph>
                            <RunText="maiores alias consequatur aut perferendis 
                            doloribus asperiores repellat. Sed ut perspiciatis unde omnis 
                            iste natus error sit voluptatem accusantium doloremque laudantium, 
                            totam rem aperiam, eaque ipsa quae ab illo inventore veritatis 
                            et quasi architecto beatae vitae dicta sunt explicabo. 
                            Nemo enim ipsam voluptatem quia voluptas sit aspernatur 
                            aut odit aut fugit, sed quia consequuntur magni dolores eos qui 
                            ratione voluptatem sequi nesciunt. Neque porro quisquam est, 
                            qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, 
                            sed quia non numquam eius modi tempora incidunt ut labore et 
                            dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, 
                            quis nostrum exercitationem ullam corporis suscipit laboriosam, 
                            nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure 
                            reprehenderit qui in ea voluptate velit esse quam nihil molestiae 
                            consequatur, vel illum qui dolorem eum fugiat quo voluptas 
                            nulla pariatur? At vero eos et accusamus et iusto odio dignissimos 
                            ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti 
                            quos dolores et quas molestias excepturi sint occaecati cupiditate 
                            non provident, similique sunt in culpa qui officia deserunt 
                            mollitia animi, id est laborum et dolorum fuga. Et harum quidem 
                            rerum facilis est et expedita distinctio. Nam libero tempore, 
                            cum soluta nobis est eligendi optio cumque nihil impedit quo minus 
                            id quod maxime placeat facere possimus, omnis voluptas assumenda est, 
                            omnis dolor repellendus. Temporibus autem quibusdam et aut officiis 
                            debitis aut rerum necessitatibus saepe eveniet ut et voluptates 
                            repudiandae sint et molestiae non recusandae. Itaque earum rerum 
                            hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus 
                            maiores alias consequatur aut perferendis doloribus asperiores 
                            repellat.Sed ut perspiciatis unde omnis iste natus error sit 
                            voluptatem accusantium doloremque laudantium, totam rem aperiam, 
                            eaque ipsa quae ab illo inventore veritatis et quasi architecto 
                            beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia 
                            voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur 
                            magni dolores eos qui ratione voluptatem sequi nesciunt. 
                            Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, 
                            consectetur, adipisci velit, sed quia non numquam eius modi tempora 
                            incidunt ut labore et dolore magnam aliquam quaerat voluptatem. 
                            Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis 
                            suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? 
                            Quis autem vel eum iure reprehenderit qui in ea voluptate velit 
                            esse quam nihil molestiae consequatur, vel illum qui dolorem eum 
                            fugiat quo voluptas nulla pariatur? At vero eos et accusamus et iusto 
                            odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti 
                            atque corrupti quos dolores et quas molestias excepturi sint"/>
                        </Paragraph>
                    </FlowDocument>
                </RichTextBox>
            </ScrollViewer>
        </Grid>
    </Window>

    记住在scrollview内的所有东西上使用“自动”高度。 进入下一阶段! 现在,你只需要复制scrollview到2 scrollview !将第一个重命名为“main_scroll”,第二个重命名为“scroll_animator”。现在,将scroll_animator的子元素更改为一个空组。将empty组的Height属性绑定到main_scroll内的RichTextBox的ActualHeight属性。做得好! 时间代码! 在开始本节之前,您需要知道WPF标准的scrollview不支持通过代码直接设置Offset中的值,它是一个类似于将其设置为1,2,3的函数!真糟糕!然后我们需要手动添加偏移量属性,这真的很容易创建! 将类添加到项目根目录中。添加物品比;类在;将这段代码添加到你的类中。保存它! ScrollViewFixer.cs 隐藏,收缩,复制Code

    //// After Namespace
    public class ScrollViewFixer: ScrollViewer {
     public static DependencyProperty v_offsetProperty = DependencyProperty.Register
           ("v_offset", typeof(double), typeof(ScrollViewFixer), 
           new PropertyMetadata(new PropertyChangedCallback(OnVerticalChanged)));
     public static DependencyProperty h_offset = DependencyProperty.Register
     ("h_offset", typeof(double), typeof(ScrollViewFixer), 
     new PropertyMetadata(new PropertyChangedCallback(OnHorizontalChanged)));
     
    private static void OnVerticalChanged(DependencyObject ss_dependency, 
    DependencyPropertyChangedEventArgs ss_evenargs) {
      ScrollViewFixer viewer = ss_dependency as ScrollViewFixer;
      viewer.ScrollToVerticalOffset((double) ss_evenargs.NewValue);
     } 
    
    private static void OnHorizontalChanged(DependencyObject ss_dependency, 
    DependencyPropertyChangedEventArgs ss_evenargs) {
      ScrollViewFixer viewer = ss_dependency as ScrollViewFixer;
      viewer.ScrollToHorizontalOffset((double) ss_evenargs.NewValue);
     }
    
     public double CurrentHorizontalOffset {
      get {
       return (double) this.GetValue(h_offset);
      }
      set {
       this.SetValue(h_offset, value);
      }
     }
    
     public double v_offset {
      get {
       return (double) this.GetValue(v_offsetProperty);
      }
      set {
       this.SetValue(v_offsetProperty, value);
      }
     }
    }

    +记住,将此代码添加到您的cs文件名称空间。 现在让我们完成它……更改main_scroll如下: 替换: 隐藏,ScrollViewer x:Name="main_scroll" Margin="0"> : 隐藏,复制Code<fixed_scrl:ScrollViewFixer x:Name="main_scroll" Margin="0,0,18,0" VerticalScrollBarVisibility =“隐藏”比; 在xmlns中在窗口顶部添加名称空间: 隐藏,复制Codexmlns: fixed_scrl = " clr-namespace: Scroll_Fixer_Namespace” 记住“Scroll_Fixer_Namespace”是您的“ScrollViewFixer”的名称空间。cs”文件。 隐藏,复制Codenamespace Scroll_Fixer_Namespace { 公共类ScrollViewFixer: ScrollViewer {… 将scroll_animator调整为“滚动条”框的大小。动画的时间! 过程: 向scroll_animator添加一个ScrollChanged事件。创建动画代码(不要忘记添加使用System.Windows.Media.Animation;): & lt; scroll_animator>ScrollChanged事件 隐藏,复制Code

    private void scroll_animator_ScrollChanged(object sender, ScrollChangedEventArgs e) {
     PowerEase _ease = new PowerEase();
     _ease.EasingMode = EasingMode.EaseOut;
     _ease.Power = 8;
     DoubleAnimation scrollanim = new DoubleAnimation
                          (scroll_animator.VerticalOffset, TimeSpan.FromSeconds(2));
     scrollanim.EasingFunction = _ease;
     main_scroll.BeginAnimation
                          (Scroll_Fixer_Namespace.ScrollViewFixer.v_offset_property, scrollanim);
    }

    我是PowerEase的超级粉丝。如果你想要,把它改为普通的容易的结果更平滑。 做得好!现在,如果你改变你的滚动条,它是平滑的,非常棒!但车:| 现在我们要解决… 修复Scrollview问题 A>修复Mousewheel滚动 将PreviewMouseWheel添加到main_scroll。禁用处理程序并将其连接到动画器。这就像: 隐藏,MouseWheel_Fix(对象发送者,MouseWheelEventArgs e) {e。处理= true;} 额外的模式 隐藏,MouseWheel_Fix(对象发送者,MouseWheelEventArgs e) { e。处理= true; int Division_Unit = 5; scroll_animator.ScrollToVerticalOffset (scroll_animator。VerticalOffset + ((e。Delta * -1) / Division_Unit)); } B>解决动态内容 如果你正在使用一个动态框架元素,如ListBox, Editbox, Textbox, RichText, Stackpanel,你需要设置滚动条更新添加的东西,改变… 创建一个函数UpdateAnimator()到你的代码后面: 隐藏,UpadeUpdateAnimator() { scroll_animator.ScrollToEnd (); } 现在将SizeChanged添加到main_scroll并插入UpadeUpdateAnimator();它! 隐藏,复制Codeprivate void Content_Size_Change(对象发送者,SizeChangedEventArgs e) { if (this.IsLoaded){///启动修复 UpadeUpdateAnimator (); } } 在主ScrollView内容的每次更新中,只需使用一点UpadeUpdateAnimator();工作后! 我们完成了!享受您的惊人,平滑,动画滚动视图!! 历史 2020年1月4日:初版 本文转载于:http://www.diyabc.com/frontweb/news12281.html

  • 相关阅读:
    所谓瓶颈
    世界那么Big,组件那么Small
    PHPUnit单元测试中类protected/private方法测试
    WCF:如何将net.tcp协议寄宿到IIS
    Windows服务安装异常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可 访问的日志: Security
    Windows 服务入门指南
    Visual studio 能否定位打开文件在项目中的位置
    电商框架调研
    可伸缩性/可扩展性(Scalable/scalability)
    LoadRunner基础入门教程
  • 原文地址:https://www.cnblogs.com/Dincat/p/13473872.html
Copyright © 2020-2023  润新知