Как запустить раскадровку на текстовом блоке Строка изменяется в Silverlight? - PullRequest
1 голос
/ 07 марта 2011

Мне интересно, есть ли какая-нибудь простая техника для запуска раскадровки, если текстовая строка текстового блока была изменена.Заранее спасибо!

1 Ответ

5 голосов
/ 07 марта 2011

Ниже приведено xaml для пользовательского элемента управления, который будет анимировать непрозрачность элемента при изменении свойства Text для TextBlock.

Это использует действие PropertyChangedTrigger и ControlStoryboard, чтобы это произошло. Эти предметы принадлежат dll, которые устанавливаются с Blend, но вы можете установить их отдельно, если у вас нет Blend: Blend 4 SDK

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
    x:Class="TextboxAnimation.MainPage"
    Width="640" Height="480">
    <UserControl.Resources>
        <Storyboard x:Name="AnAnimation">
            <DoubleAnimationUsingKeyFrames
                Storyboard.TargetProperty="(UIElement.Opacity)"
                Storyboard.TargetName="animationTextBlock">
                <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
    </UserControl.Resources>

    <StackPanel x:Name="LayoutRoot" Background="White">
        <TextBlock x:Name="textBlock"
            HorizontalAlignment="Left" Text="Click Me To Change Text"
            MouseLeftButtonDown="TextBlockClicked">
            <i:Interaction.Triggers>
                <ei:PropertyChangedTrigger Binding="{Binding Text, ElementName=textBlock}">
                    <ei:ControlStoryboardAction Storyboard="{StaticResource AnAnimation}"/>
                </ei:PropertyChangedTrigger>
            </i:Interaction.Triggers>
        </TextBlock>
        <TextBlock
            x:Name="animationTextBlock"
            Text="Animate Me!" Margin="0,8,0,0" Opacity="0"/>
    </StackPanel>
</UserControl>

Вот код, который используется для события click, изменяющего свойство TextBlock Text:

int times = 0;

private void TextBlockClicked(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    times++;

    textBlock.Text = String.Format("I've been clicked and changed {0} times!", times);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...