TextBox with UpdateSourceExceptionFilter handler : TextBox « Windows Presentation Foundation « VB.Net Tutorial






<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
WPF Text Box With Update Source Exception Filter Handler








16.4.TextBox
16.4.1.You cannot use TextBox and Image at the same time for Button ContentYou cannot use TextBox and Image at the same time for Button Content
16.4.2.Single line and Multiline TextBoxSingle line and Multiline TextBox
16.4.3.TextBox ColumnTextBox Column
16.4.4.Bind value to TextBoxBind value to TextBox
16.4.5.An upside down TextBoxAn upside down TextBox
16.4.6.Style with Data Trigger for TextBoxStyle with Data Trigger for TextBox
16.4.7.TextBox with custom ErrorTemplate and ToolTipTextBox with custom ErrorTemplate and ToolTip
16.4.8.TextBox uses the ExceptionValidationRule and UpdateSourceExceptionFilter handlerTextBox uses the ExceptionValidationRule and UpdateSourceExceptionFilter handler
16.4.9.TextBox with UpdateSourceExceptionFilter handlerTextBox with UpdateSourceExceptionFilter handler
16.4.10.TextBox focus listenerTextBox focus listener
16.4.11.TextBox MouseLeftButtonDown action and PreviewMouseLeftButtonDown actionTextBox MouseLeftButtonDown action and PreviewMouseLeftButtonDown action
16.4.12.Mark the text control as being changed to prevent any text content or selection changed eventsMark the text control as being changed to prevent any text content or selection changed events
16.4.13.Listen to TextBox text changed eventListen to TextBox text changed event
16.4.14.Handler for the PreviewKeyDown event on the TextBoxHandler for the PreviewKeyDown event on the TextBox
16.4.15.Format TextBox with MenuItem: normal, bold, italicFormat TextBox with MenuItem: normal, bold, italic
16.4.16.TextBox: set text, select all, clear, prepend, insert, append, cut, paste, undoTextBox: set text, select all, clear, prepend, insert, append, cut, paste, undo
16.4.17.Set TextBox to editableSet TextBox to editable
16.4.18.Scroll TextBoxScroll TextBox
16.4.19.Use TextBox.CommandBindingst to bind commandUse TextBox.CommandBindingst to bind command
16.4.20.Use Dictionary to record which textbox has been changed and not savedUse Dictionary to record which textbox has been changed and not saved
16.4.21.Set TextBox ContextMenu to nullSet TextBox ContextMenu to null
16.4.22.TextBox Selection start, end and selected textTextBox Selection start, end and selected text
16.4.23.Scrollable TextBox ColumnScrollable TextBox Column
16.4.24.Check Spelling ErrorCheck Spelling Error