#wpf #silverlight #validation #xaml
#wpf #silverlight #проверка #xaml
Вопрос:
Я использую IDataErrorInfo в своих viewmodels, и у меня есть стиль (ниже) для текстового поля с шаблоном ошибки, который работает нормально. Я знаю, что «ValidatesOnDataErrors = True» используется как:
<TextBox Text="{Binding Path=LastName, ValidatesOnDataErrors=True}"
Style="{StaticResource TextBoxStyle}" />
заставит WPF использовать IDataErrorInfo, но мне интересно, как включить это в мой стиль.
Приветствия,
Беррил
<Style x:Key="TextBoxStyle" TargetType="{x:Type TextBox}">
...
<!--
Error handling
-->
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Right" Text=" *"
Foreground="Red"
FontWeight="Bold" FontSize="16"
ToolTip="{Binding ElementName=placeholder, Path=AdornedElement.(Validation.Errors).CurrentItem.ErrorContent}"/>
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder Name="placeholder"></AdornedElementPlaceholder>
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="Background" Value="LightYellow"/>
</Trigger>
</Style.Triggers>
</Style>
Ответ №1:
Если я понимаю, о чем вы спрашиваете, вы хотите иметь возможность использовать ValidatesOnDataError=True
в своем стиле, чтобы вам не приходилось повторять это каждый раз.
Если это так, вы не можете, потому что это свойство привязки данных, а не стиля; и вы не можете создать шаблон привязки данных.
Комментарии:
1. да, это моя мотивация. Похоже, где-то должна быть помощь для невероятно ленивых,
Ответ №2:
Мне просто интересно, если вы используете метку вместо текстового поля, то в стиле метки вы, вероятно, можете сделать что-то вроде этого,
<ControlTemplate TargetType="sdk:Label">
<TextBlock x:Name="textBlock" Text="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, ValidatesOnDataErrors=True}">
Комментарии:
1. Хорошая мысль! У вас была возможность попробовать это?
Ответ №3:
Вы не можете, потому что это часть определения привязки к вашему свойству, а не то, как визуализируется ошибка.