TextBox uses the ExceptionValidationRule and UpdateSourceExceptionFilter handler
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:WpfApplication1"
x:Class="WpfApplication1.Window1">
<Window.Resources>
<c:MyDataSource x:Key="ods"/>
<ControlTemplate x:Key="validationTemplate">
<DockPanel>
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
<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>
</Window.Resources>
<StackPanel>
<TextBox Name="textBox3" Width="50" FontSize="15"
Validation.ErrorTemplate="{StaticResource validationTemplate}"
Style="{StaticResource textBoxInError}">
<TextBox.Text>
<Binding Path="Age3" Source="{StaticResource ods}" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<ExceptionValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<CheckBox Name="cb" Checked="UseCustomHandler" Unchecked="DisableCustomHandler">Enable Custom Handler (see ToolTip)</CheckBox>
</StackPanel>
</Window>
//File:Window.xaml.vb
Imports System
Imports System.ComponentModel
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents
Imports System.Windows.Navigation
Imports System.Windows.Shapes
Imports System.Windows.Data
Imports System.Globalization
Imports System.Collections.ObjectModel
Namespace WpfApplication1
Public Partial Class Window1
Inherits Window
Public Sub New()
InitializeComponent()
End Sub
Private Sub UseCustomHandler(sender As Object, e As RoutedEventArgs)
Dim myBindingExpression As BindingExpression = textBox3.GetBindingExpression(TextBox.TextProperty)
Dim myBinding As Binding = myBindingExpression.ParentBinding
myBinding.UpdateSourceExceptionFilter = New UpdateSourceExceptionFilterCallback(AddressOf ReturnExceptionHandler)
myBindingExpression.UpdateSource()
End Sub
Private Sub DisableCustomHandler(sender As Object, e As RoutedEventArgs)
Dim myBinding As Binding = BindingOperations.GetBinding(textBox3, TextBox.TextProperty)
myBinding.UpdateSourceExceptionFilter = DirectCast([Delegate].Remove(myBinding.UpdateSourceExceptionFilter, New UpdateSourceExceptionFilterCallback(AddressOf ReturnExceptionHandler)), UpdateSourceExceptionFilterCallback)
BindingOperations.GetBindingExpression(textBox3, TextBox.TextProperty).UpdateSource()
End Sub
Private Function ReturnExceptionHandler(bindingExpression As Object, exception As Exception) As Object
Return "This is from the UpdateSourceExceptionFilterCallBack."
End Function
End Class
Public Class AgeRangeRule
Inherits ValidationRule
Private _min As Integer
Private _max As Integer
Public Sub New()
End Sub
Public Property Min() As Integer
Get
Return _min
End Get
Set
_min = value
End Set
End Property
Public Property Max() As Integer
Get
Return _max
End Get
Set
_max = value
End Set
End Property
Public Overrides Function Validate(value As Object, cultureInfo As CultureInfo) As ValidationResult
Dim age As Integer = 0
Try
If DirectCast(value, String).Length > 0 Then
age = Int32.Parse(DirectCast(value, [String]))
End If
Catch e As Exception
Return New ValidationResult(False, "Illegal characters or " & e.Message)
End Try
If (age < Min) OrElse (age > Max) Then
Return New ValidationResult(False, "Please enter an age in the range: " & Min & " - " & Max & ".")
Else
Return New ValidationResult(True, Nothing)
End If
End Function
End Class
Public Class MyDataSource
Private _age As Integer
Private _age2 As Integer
Private _age3 As Integer
Public Sub New()
Age = 0
Age2 = 0
End Sub
Public Property Age() As Integer
Get
Return _age
End Get
Set
_age = value
End Set
End Property
Public Property Age2() As Integer
Get
Return _age2
End Get
Set
_age2 = value
End Set
End Property
Public Property Age3() As Integer
Get
Return _age3
End Get
Set
_age3 = value
End Set
End Property
End Class
End Namespace
Related examples in the same category
1. | You cannot use TextBox and Image at the same time for Button Content | | |
2. | Single line and Multiline TextBox | | |
3. | TextBox Column | | |
4. | Bind value to TextBox | | |
5. | Provide Keyboard Access to Text Boxes | | |
6. | An upside down TextBox | | |
7. | Style with Data Trigger for TextBox | | |
8. | TextBox with custom ErrorTemplate and ToolTip | | |
9. | TextBox with UpdateSourceExceptionFilter handler | | |
10. | TextBox focus listener | | |
11. | TextBox MouseLeftButtonDown action and PreviewMouseLeftButtonDown action | | |
12. | Mark the text control as being changed to prevent any text content or selection changed events | | |
13. | Listen to TextBox text changed event | | |
14. | Handler for the PreviewKeyDown event on the TextBox | | |
15. | Format TextBox with MenuItem: normal, bold, italic | | |
16. | TextBox: set text, select all, clear, prepend, insert, append, cut, paste, undo | | |
17. | Set TextBox to editable | | |
18. | TextBox PreviewTextInput | | |
19. | Scroll TextBox | | |
20. | TextBox text changed event | | |
21. | TextBox TextChanged event | | |
22. | Use TextBox.CommandBindingst to bind command | | |
23. | Use Dictionary to record which textbox has been changed and not saved | | |
24. | Set TextBox ContextMenu to null | | |
25. | TextBox Selection start, end and selected text | | |
26. | Scrollable TextBox Column | | |
27. | Check Spelling Error | | |