Как набрать sh текст ошибки с помощью анимации WPF - PullRequest
1 голос
/ 10 марта 2020

У меня отображается текстовое поле с использованием DataTemplate. В приведенном ниже коде TextBoxViewModel является производным от IDataErrorInfo.

protected String m_ValidationErrorMessage;
protected String ValidationErrorMessage
{
    get { return m_ValidationErrorMessage; }
}

private bool m_ShowErrorMessage = false;
public bool ShowErrorMessage
{
    get { return m_ShowErrorMessage; }
    set { this.m_ShowErrorMessage = value; }
}

private String m_DisplayValue;
public String DisplayValue
{
    get { return this.m_DisplayValue; }
    set
    {
        if (m_DisplayValue != value)
        {
            if (IsTextValid(value, out m_ValidationErrorMessage))
            {
                // Set data to model
                this.SendPropertyChangedEvent(nameof(this.DisplayValue));
            }
            else
            {
                ShowErrorMessage = true;
            }
        }
    }
}

public string this[string columnName]
{
    get
    {
        if (columnName == nameof(this.DisplayValue))
        {
            if (ShowErrorMessage)
            {
                return ValidationErrorMessage;
            }
        }
        return null;
    }
}

xaml для TextBoxViewModel

<DataTemplate DataType="{x:Type vms:TextBoxViewModel}">
    <DockPanel>
        <Label Content="{Binding Path=DisplayName}" MinWidth="120" MaxWidth="150"/>
        <TextBox DockPanel.Dock="Left" Text="{Binding Path=DisplayValue,Mode=TwoWay, UpdateSourceTrigger=Default,ValidatesOnDataErrors=True}" Validation.ErrorTemplate="{StaticResource ErrorTemplate}"/>
    </DockPanel>
</DataTemplate


<ControlTemplate x:Key="ErrorTemplate">
    <StackPanel Orientation="Horizontal">
        <AdornedElementPlaceholder x:Name="textBox"/>
        <ItemsControl ItemsSource="{Binding}" VerticalAlignment="Center" HorizontalAlignment="Center">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding ErrorContent}" Foreground="Red"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </StackPanel>
</ControlTemplate>

Я пытаюсь набрать sh текст ошибки в течение нескольких секунд и скрываю его после этого. Есть ли способ достичь этого с помощью XAML (WPF анимация)?

1 Ответ

3 голосов
/ 10 марта 2020

Например, вы можете анимировать свойство Opacity TextBlock, используя DoubleAnimation. Как то так:

<ControlTemplate x:Key="ErrorTemplate">
    <StackPanel Orientation="Horizontal">
        <AdornedElementPlaceholder x:Name="textBox"/>
        <ItemsControl ItemsSource="{Binding}" VerticalAlignment="Center" HorizontalAlignment="Center">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding ErrorContent}" Foreground="Red">
                        <TextBlock.Triggers>
                            <EventTrigger RoutedEvent="Loaded">
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                                         From="0" To="1" 
                                                         AutoReverse="False" 
                                                         Duration="0:0:0.5" 
                                                         RepeatBehavior="3x" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                        </TextBlock.Triggers>
                    </TextBlock>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </StackPanel>
</ControlTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...