zoukankan      html  css  js  c++  java
  • 【WPF】用CustomControl打造WPF版的Marquee

    控件代码已经更新,支持上下左右四个方向。VS2010工程

    /Files/RMay/WPF_Marquee/WpfMarquee.zip

    我们知道在html中有一个marquee标签,可以很方便的实现文字滚动的效果,比如如下简单的声明:

    <marquee loop="3" behavior="scroll">文本信息<marquee>

    在WPF里面,当然,我们可以用Animation和Storyboard来达到同样的效果,但是感觉总是不那么好,每次都需要做动画。而且设置动画的属性很麻烦。能不能就像HTML简单的声明就行了呢?比如:

    <l:Marquee Content="123" Direction="Right" Behavior="Scroll" ScrollAmount="20" ScrollDelay="500"/>

    能够这样简单的指定属性来使用。

    下面我们就用开发CustomControl的方式来打造一个Marquee控件。

    首先,我们添加一个自定义控件,这个控件继承自ContentControl,因为它的里面可以放任何东西,而不仅仅限于文本。

    接着,仿造html中的marquee标签,定义一些必要的属性。这些属性都是DependencyProperty。

    接下来我们需要写动画的逻辑了。有三种方式来写这个动画:

    1、利用系统的Animation和Storyboard

    2、在CompositionTarget的Rendering事件中写动画

    3、利用DispatcherTimer写动画

    我们这儿动画的行为有好几种,比较复杂,利用系统的动画方式来写会很麻烦,并且这儿有一个ScrollDelay属性来控制延时,在CompositionTarget的Rendering事件中不太好控制,因此,最后我选择用DispatcherTimer,在它的Tick事件中写动画逻辑。

    动画的逻辑主要就是改变Content的位移,需要注意的是,这个位移是通过TranlateTransform来实现的。

    部分代码如下:

    Code

    更详尽的内容可以直接参看源码。

    使用的时候非常简单

    Code

    需要注意的是,如果设定了Loop,当Loop结束的时候,我并没有停止Timer,这样在Window Resize之后动画会重新播放。读者可以将选择其Stop掉,而在ResetAnimation方法中重新启动。

    源码下载:

    /Files/RMay/WPF_Marquee/WpfMarquee.rar

  • 相关阅读:
    HDU 3586 Information Disturbing (树形DP,二分)
    HDU 4274 Spy's Work (树形DP,模拟)
    HDU 4276 The Ghost Blows Light (树形DP,变形)
    ZOJ 3627 Treasure Hunt II (贪心,模拟)
    ZOJ 3626 Treasure Hunt I (树形DP,常规)
    POJ 2104 K-th Number (区间第k大)
    HDU 4044 GeoDefense (树形DP,混合经典)
    POJ 2486 Apple Tree (树形DP,树形背包)
    HDU 4003 Find Metal Mineral (树形DP,经典)
    TinyMCE
  • 原文地址:https://www.cnblogs.com/RMay/p/1379023.html
Copyright © 2011-2022 走看看