Я пытаюсь обобщить пример, предоставленный Microsoft, иллюстрирующий, как реализовать проверку связывания [https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-implement-binding-validation#see-also], переформулировав все это в C #.
(1) Я пытаюсь преобразовать следующую привязку XAML в C #:
<TextBox Name="textBox1" Width="50" FontSize="15"
Validation.ErrorTemplate="{StaticResource validationTemplate}"
Style="{StaticResource textBoxInError}"
Grid.Row="1" Grid.Column="1" Margin="2">
<TextBox.Text>
<Binding Path="Age" Source="{StaticResource ods}"
UpdateSourceTrigger="PropertyChanged" >
<Binding.ValidationRules>
<c:AgeRangeRule Min="21" Max="130"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
(2) и следующий XAML, который создает красный восклицательный знак для уведомления пользователя об ошибке проверки C #:
<ControlTemplate x:Key="validationTemplate">
<DockPanel>
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
(3) также создается XAML, который создает всплывающую подсказку для C #, которая показывает сообщение об ошибке:
<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
Моя цель - сделать его многократно используемым во многих местах, определив класс, который может создавать и определять как текстовое поле, так и привязку в моей программе для соединения текстовых полей со свойствами целого или двойного типа. Хотя аналогичный вопрос задавался ранее [ WPF C #, как создать ЭТУ привязку в коде? , в этом случае код XAML для определения привязки и вспомогательных утилит / методов довольно сложен.
Любой комментарий, предложение или помощь будут оценены.
i.konuk