Я делаю проверку всех текстовых полей с помощью IDataErrorInfo
на моей форме WPF, как это:WPF Проверка с помощью IDataErrorInfo - Как удалить дубликаты Validation.ErrorTemplate
<TextBox Name="txtAddress"
Validation.Error="Validation_Error"
Text="{Binding Path=Address, UpdateSourceTrigger=LostFocus,
ValidatesOnDataErrors=True, NotifyOnValidationError=True}">
// If I have many TextBoxes to validate, I have to copy this and paste
// for each TextBox in XAML. This obviously violates DRY. How do I define
// this at one place and use it for all TextBoxes on my form?
<Validation.ErrorTemplate>
<ControlTemplate>
<DockPanel LastChildFill="true">
<Border Background="Red" DockPanel.Dock="right" Margin="5,0,0,0" Width="16" Height="16" CornerRadius="10"
ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
<TextBlock Text="!"
VerticalAlignment="center" HorizontalAlignment="center"
FontWeight="Bold" Foreground="white"/>
</Border>
<AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center" >
<Border BorderBrush="red" BorderThickness="1" />
</AdornedElementPlaceholder>
</DockPanel>
</ControlTemplate>
</Validation.ErrorTemplate>
</TextBox>
Это мой метод Validation_Error используется выше:
private void Validation_Error(object sender, ValidationErrorEventArgs e)
{
if (e.Action == ValidationErrorEventAction.Added)
{
mNumErrors++;
}
else
{
mNumErrors--;
}
}
Если у меня много текстовых полей в моей форме, я должен скопировать раздел выше в каждое определение TextBox в XAML. Как определить его на одном месте и использовать его для всех текстовых полей?
Спасибо,
Спасибо, но если вы добавляете подтверждение через стиль, как вы предлагаете, я получаю «MyErrorTemplate не может быть разрешен». – pixel
Вы можете добавить 'ControlTemplate' в' Style' setter напрямую, если он используется только в текстовых блоках. Или вы можете переместить 'ControlTemplate' в ресурсы и стиль приложения в ресурсы окна. – bars222
используется только для TextBoxes, и я старался точно так же, как вы указали выше. Ошибки с «« MyErrorTemplate не могут быть решены » – pixel