2

在 Microsoft 的 Expression Blend 3 SketchFlow 应用程序中。

您将如何对文本的键入进行动画处理,最好是逐个字符的分阶段进行。就好像用户正在输入它一样。

一个相关的闪烁光标会使它变得完美,但这远远超出了“拥有”的领域。

关键帧动画系统,不允许你操纵

公共属性 > 文本

因此,它不会作为动画关键帧中记录的变化持续存在。

我正在寻找编辑器步骤(使用某种其他控件)甚至 XAML 代码......

<VisualState>
    <StoryBoard>
        <DoubleAnimationUsingKeyFrame ... >
4

1 回答 1

3

在使用涉及在文本块上擦除矩形动画的解决方案发表博客后,创建了一个响应博客文章,其中包含使用附加到文本块的自定义行为的更高级解决方案。

创建一个 'TypeOnAction' 行为并添加到 TextBlock 中,将提供所需的逐字符显示效果,并具有可自定义的出现率。在此处获取完整的代码示例。

public class TypeOnAction : TriggerAction<TextBlock>
{
    DispatcherTimer timer;
    int len = 1;

    public TypeOnAction()
    {
        timer = new DispatcherTimer();
    }

    protected override void Invoke(object o)
    {
        if (AssociatedObject == null)
            return;

        AssociatedObject.Text = "";
        timer.Interval = TimeSpan.FromSeconds(IntervalInSeconds);
        timer.Tick += new EventHandler(timer_Tick);
        len = 1;
        timer.Start();
    }

    void timer_Tick(object sender, EventArgs e)
    {
        if (len > 0 && len <= TypeOnText.Length)
        {
            AssociatedObject.Text = TypeOnText.Substring(0, len);
            len++;
            timer.Start();
        }
        else
            timer.Stop();
    }

    public string TypeOnText
    {
        get { return (string)GetValue(TypeOnTextProperty); }
        set { SetValue(TypeOnTextProperty, value); }
    }

    public static readonly DependencyProperty TypeOnTextProperty =
        DependencyProperty.Register("TypeOnText", typeof(string), typeof(TypeOnAction), new PropertyMetadata(""));

    public double IntervalInSeconds
    {
        get { return (double)GetValue(IntervalInSecondsProperty); }
        set { SetValue(IntervalInSecondsProperty, value); }
    }

    public static readonly DependencyProperty IntervalInSecondsProperty =
        DependencyProperty.Register("IntervalInSeconds", typeof(double), typeof(TypeOnAction), new PropertyMetadata(0.35));

}
于 2009-08-25T01:17:35.877 回答