Imports System.Windows.Interactivity Imports System.Windows.Data Imports System.Windows.Automation.Peers Imports System.Windows.Automation.Provider Imports System.Linq Namespace Commands Public Class DefaultButtonBehavior Inherits Behavior(Of Panel) Public Property DefaultButtonName As String Get Return CType(GetValue(DefaultButtonNameProperty), String) End Get Set(ByVal value As String) SetValue(DefaultButtonNameProperty, value) End Set End Property Public Shared ReadOnly DefaultButtonNameProperty As DependencyProperty _ = DependencyProperty.Register(name:="DefaultButtonName", _ propertyType:=GetType(String), _ ownerType:=GetType(DefaultButtonBehavior), _ typeMetadata:=Nothing) Protected Overrides Sub OnAttached() MyBase.OnAttached() AddHandler AssociatedObject.KeyUp, AddressOf AssociatedObject_KeyUp End Sub Protected Overrides Sub OnDetaching() MyBase.OnDetaching() RemoveHandler AssociatedObject.KeyUp, AddressOf AssociatedObject_KeyUp End Sub Private Sub AssociatedObject_KeyUp(ByVal sender As Object, ByVal e As KeyEventArgs) If e.Key = Key.Enter Then Dim defaultButton As Button = AssociatedObject.Children.OfType(Of Button).FirstOrDefault(Function(x) x.Name = DefaultButtonName) If defaultButton IsNot Nothing And defaultButton.IsEnabled Then 'update binding source of TextBox Dim inputTxts = AssociatedObject.Children.OfType(Of TextBox)() For Each txt In inputTxts Dim exp As BindingExpression = txt.GetBindingExpression(TextBox.TextProperty) exp.UpdateSource() Next 'update binding source of Password Dim inputPwds = AssociatedObject.Children.OfType(Of PasswordBox)() For Each pwd In inputPwds Dim exp As BindingExpression = pwd.GetBindingExpression(PasswordBox.PasswordProperty) exp.UpdateSource() Next Dim peer As New ButtonAutomationPeer(defaultButton) Dim invoke As IInvokeProvider = peer.GetPattern(PatternInterface.Invoke) invoke.Invoke() e.Handled = True End If End If End Sub End Class End Namespace