Pergunta

Expression Blend 3 aplicação SketchFlow do Em Microsoft.

Como você iria sobre animando o digitação de texto , de preferência em encenado caráter pela moda personagem. Como se o usuário está digitando-lo.

Um cursor a piscar associada seria perfeito, mas que está longe no reino do "bom ter".

O sistema de animação quadro-chave, não permite que você manipule a

Propriedade Comum> Texto

campo assim, portanto, que não persiste como uma variação registada nesse quadro-chave da animação.

Eu estou procurando tanto passos editor (usando algum tipo de outro controle) ou o código mesmo XAML ...

<VisualState>
    <StoryBoard>
        <DoubleAnimationUsingKeyFrame ... >
Foi útil?

Solução

Depois de blogar sobre isso com uma solução envolvendo uma limpeza animação de um retângulo sobre um bloco de texto, um post no blog de resposta com uma solução mais avançada de usando um comportamento personalizado anexado a um bloco de texto foi criado.

Criação de um comportamento 'TypeOnAction' e adicionando a um TextBlock, dará o efeito desejado de caráter por display de caracteres, com uma taxa de aparência personalizável. Obter o exemplo de código completo aqui .

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));

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top