получение проверки в стиле

#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:

Вы не можете, потому что это часть определения привязки к вашему свойству, а не то, как визуализируется ошибка.