WPF 超长文本的来回滚动

简介: 原文:WPF 超长文本的来回滚动 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Vblegend_2013/article/details/83621303 ...
原文: WPF 超长文本的来回滚动

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Vblegend_2013/article/details/83621303

当较小的地方显示超长的文本时  实现左右来回滚动

 

引入命名空间

xmlns:Utility="clr-namespace:Test.Wpf.Utility"

 实现

<ScrollViewer Name="slv" 
          IsHitTestVisible="False"
          Background="#05FFFFFF"
          Margin="2,10,2,0"
          VerticalScrollBarVisibility="Hidden"
          HorizontalScrollBarVisibility="Hidden">
    <Label Content="{Binding Title, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  
       VerticalContentAlignment="Center" 
       HorizontalContentAlignment="Center" 
       FontSize="18" 
       FontFamily="Microsoft YaHei" 
       Foreground="#FFFFFFFF" 
       Margin="5,0,5,0">
        <Label.Triggers>
            <EventTrigger RoutedEvent="Label.Loaded">
                <BeginStoryboard HandoffBehavior="Compose">
                    <Storyboard>
                        <DoubleAnimation From="0" 
                            To="{Binding ElementName=slv,Path=ScrollableWidth}"
                            Duration="0:0:2"
                            Storyboard.TargetName="slv"
                            AutoReverse="True"
                            RepeatBehavior="Forever"
                            BeginTime="0:0:0.2"
                            Storyboard.TargetProperty="(Utility:ScrollViewerBehavior.HorizontalOffset)">
                        </DoubleAnimation>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Label.Triggers>
    </Label>
</ScrollViewer>

ScrollViewerBehavior类

using System.Windows;
using System.Windows.Controls;

namespace Test.Wpf.Utility
{
    public static class ScrollViewerBehavior
    {
        public static readonly DependencyProperty HorizontalOffsetProperty = DependencyProperty.RegisterAttached("HorizontalOffset", typeof(double), typeof(ScrollViewerBehavior), new UIPropertyMetadata(0.0, OnHorizontalOffsetChanged));
        public static void SetHorizontalOffset(FrameworkElement target, double value)
        {
            target.SetValue(HorizontalOffsetProperty, value);
        }
        public static double GetHorizontalOffset(FrameworkElement target)
        {
            return (double)target.GetValue(HorizontalOffsetProperty);
        }
        private static void OnHorizontalOffsetChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
        {
            var view = target as ScrollViewer;
            if (view != null)
            {
                view.ScrollToHorizontalOffset((double)e.NewValue);
            }
        }

        public static readonly DependencyProperty VerticalOffsetProperty = DependencyProperty.RegisterAttached("VerticalOffset", typeof(double), typeof(ScrollViewerBehavior), new UIPropertyMetadata(0.0, OnVerticalOffsetChanged));
        public static void SetVerticalOffset(FrameworkElement target, double value)
        {
            target.SetValue(VerticalOffsetProperty, value);
        }
        public static double GetVerticalOffset(FrameworkElement target)
        {
            return (double)target.GetValue(VerticalOffsetProperty);
        }
        private static void OnVerticalOffsetChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
        {
            var view = target as ScrollViewer;
            if (view != null)
            {
                view.ScrollToVerticalOffset((double)e.NewValue);
            }
        }
    }
}

 

目录
相关文章
|
C#
WPF TextBox自动滚动到最户一行
原文:WPF TextBox自动滚动到最户一行 textBox经常用来显示程序的运行状态或者消息,如何让他自动滚动呢? 在显示消息代码下加一条自动滚动到底部的语句即可:  TextBox1.ScrollToEnd(); (如果要显示垂直滚动条设置VerticalScrollBarVisibility="Auto",如果不显示设置为Hidden) 我用的程序代码如下:   this.
2101 0
|
C# 存储
WPF 走马灯 文字滚动 自定义控件
原文:WPF 走马灯 文字滚动 自定义控件 /// /// Label走马灯自定义控件 /// [ToolboxBitmap(typeof(Label))] //设置工具箱中显示的图标 public class ScrollingTextCon...
2173 0
|
C# Windows
使 WPF 支持触摸板的横向滚动
原文:使 WPF 支持触摸板的横向滚动 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:http://blog.csdn.net/wpwalter/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
1070 0
|
前端开发 C# 容器
WPF实现滚动显示的TextBlock
原文:WPF实现滚动显示的TextBlock   在我们使用TextBlock进行数据显示时,经常会遇到这样一种情况就是TextBlock的文字内容太多,如果全部显示的话会占据大量的界面,这是我们就会只让其显示一部分,另外的一部分就让其随着时间的推移去滚动进行显示,但是WPF默认提供的TextBlo...
2369 0
|
C# 前端开发
C# WPF 滚动字幕实现
原文:C# WPF 滚动字幕实现 ...
1877 0
|
C#
WPF 实现ScrollViewer的垂直偏移滚动跳转
原文:WPF 实现ScrollViewer的垂直偏移滚动跳转 问题:考虑屏幕大小,一般都是会在表单问卷的页面使用ScrollViewer。问卷中问题漏填漏选时,在提交时校验不过,需要滚动跳转至漏填漏选项。
982 0
|
C# 内存技术
WPF中ListBox滚动时的缓动效果
原文:WPF中ListBox滚动时的缓动效果 上周工作中遇到的问题: 常规的ListBox在滚动时总是一格格的移动,感觉上很生硬。
1176 0
|
C#
WPF中获取TreeView以及ListView获取其本身滚动条的方法,可实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条)
原文:WPF中获取TreeView以及ListView获取其本身滚动条的方法,可实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条) 对于TreeView而言: TreeViewAutomationPeer lvap = new TreeViewAuto...
2402 0
|
C# 虚拟化 缓存
WPF 列表虚拟化时的滚动方式
原文:WPF 列表虚拟化时的滚动方式 ListBox的滚动方式 分为像素滚动和列表项滚动 通过ListBox的附加属性ScrollViewer.CanContentScroll来设置。因此ListBox的默认模板中,含有ScrollViewer,ScrollViewer下存放列表内容  而CanContentScroll,true支持逻辑单元(Item),false支持物理单元(像素)。
1287 0