получить подтверждение в стиле - PullRequest
1 голос
/ 06 октября 2011

Я использую IDataErrorInfo в моих моделях просмотра, и у меня есть стиль (ниже) для TextBox с шаблоном ошибки, который работает нормально.Я знаю, что «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>

Ответы [ 3 ]

3 голосов
/ 06 октября 2011

Если я понимаю, о чем вы спрашиваете, вы хотите иметь возможность использовать ValidatesOnDataError=True в своем стиле, чтобы вам не приходилось повторять его каждый раз.

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

1 голос
/ 07 октября 2011

Мне просто интересно, если вы используете Label вместо TextBox, то в стиле Label вы, вероятно, можете сделать что-то вроде этого,

                <ControlTemplate TargetType="sdk:Label">
                    <TextBlock x:Name="textBlock" Text="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, ValidatesOnDataErrors=True}">
0 голосов
/ 06 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...