У меня отображается текстовое поле с использованием 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 анимация)?