diff --git a/FasdDesktopUi/Basics/UserControls/ComboBoxPageable.xaml.cs b/FasdDesktopUi/Basics/UserControls/ComboBoxPageable.xaml.cs index 7e9bbe5..41df5fb 100644 --- a/FasdDesktopUi/Basics/UserControls/ComboBoxPageable.xaml.cs +++ b/FasdDesktopUi/Basics/UserControls/ComboBoxPageable.xaml.cs @@ -1,6 +1,7 @@ using C4IT.FASD.Base; -using C4IT.MultiLanguage; -using FasdDesktopUi.Basics.Models; +using C4IT.MultiLanguage; +using FasdDesktopUi.Basics.Helper; +using FasdDesktopUi.Basics.Models; using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -124,12 +125,25 @@ namespace FasdDesktopUi.Basics.UserControls } - public static readonly DependencyProperty SearchDataChangedProperty = - DependencyProperty.Register("SearchDataChanged", typeof(EventHandler), typeof(ComboBoxPageable), new PropertyMetadata(null)); - - #endregion - - #region ItemData + public static readonly DependencyProperty SearchDataChangedProperty = + DependencyProperty.Register("SearchDataChanged", typeof(EventHandler), typeof(ComboBoxPageable), new PropertyMetadata(null)); + + #endregion + + #region RestoreParentScrollFocusOnDropDownClose + + public bool RestoreParentScrollFocusOnDropDownClose + { + get { return (bool)GetValue(RestoreParentScrollFocusOnDropDownCloseProperty); } + set { SetValue(RestoreParentScrollFocusOnDropDownCloseProperty, value); } + } + + public static readonly DependencyProperty RestoreParentScrollFocusOnDropDownCloseProperty = + DependencyProperty.Register("RestoreParentScrollFocusOnDropDownClose", typeof(bool), typeof(ComboBoxPageable), new PropertyMetadata(false)); + + #endregion + + #region ItemData public ObservableCollection> ItemData { @@ -302,11 +316,33 @@ namespace FasdDesktopUi.Basics.UserControls } } - private void ComboBoxControl_DropDownClosed(object sender, EventArgs e) - { - timer.Stop(); - cFocusInvoker.InvokeLostFocus(this, e); - } + private void ComboBoxControl_DropDownClosed(object sender, EventArgs e) + { + timer.Stop(); + cFocusInvoker.InvokeLostFocus(this, e); + + if (RestoreParentScrollFocusOnDropDownClose) + { + _ = Dispatcher.BeginInvoke((Action)(() => + { + try + { + var parentScrollViewer = cUiElementHelper.GetFirstParentOfType(this); + Keyboard.ClearFocus(); + + if (parentScrollViewer != null) + { + parentScrollViewer.Focus(); + Keyboard.Focus(parentScrollViewer); + } + } + catch (Exception exception) + { + LogException(exception); + } + }), System.Windows.Threading.DispatcherPriority.Input); + } + } private void ComboBoxControl_DropDownOpened(object sender, EventArgs e) { diff --git a/FasdDesktopUi/Basics/UserControls/Ticket/CloseCaseDialogWithTicket.xaml b/FasdDesktopUi/Basics/UserControls/Ticket/CloseCaseDialogWithTicket.xaml index 7963efa..dd4ab18 100644 --- a/FasdDesktopUi/Basics/UserControls/Ticket/CloseCaseDialogWithTicket.xaml +++ b/FasdDesktopUi/Basics/UserControls/Ticket/CloseCaseDialogWithTicket.xaml @@ -271,14 +271,15 @@ SelectedInternIcon="status_bad" VerticalAlignment="Bottom" /> - + diff --git a/FasdDesktopUi/Basics/UserControls/Ticket/CloseCaseDialogWithTicket.xaml.cs b/FasdDesktopUi/Basics/UserControls/Ticket/CloseCaseDialogWithTicket.xaml.cs index 78582dc..d8353a2 100644 --- a/FasdDesktopUi/Basics/UserControls/Ticket/CloseCaseDialogWithTicket.xaml.cs +++ b/FasdDesktopUi/Basics/UserControls/Ticket/CloseCaseDialogWithTicket.xaml.cs @@ -2745,13 +2745,7 @@ namespace FasdDesktopUi.Basics.UserControls if (parentBorder != null) cFocusInvoker.InvokeLostFocus(parentBorder, e); - if (ReferenceEquals(sender, TicketStatusCombobox)) - { - _ = Dispatcher.BeginInvoke(new Action(RestoreDialogFocusAfterTicketActionSelection), System.Windows.Threading.DispatcherPriority.Input); - return; - } - - DynamicStatusAdditionBorder?.Focus(); + _ = Dispatcher.BeginInvoke(new Action(RestoreDialogFocusAfterTicketActionSelection), System.Windows.Threading.DispatcherPriority.Input); } #endregion diff --git a/FasdDesktopUi/Basics/UserControls/Ticket/CloseTicketDialog.xaml.cs b/FasdDesktopUi/Basics/UserControls/Ticket/CloseTicketDialog.xaml.cs index 087a74c..cc2c7bf 100644 --- a/FasdDesktopUi/Basics/UserControls/Ticket/CloseTicketDialog.xaml.cs +++ b/FasdDesktopUi/Basics/UserControls/Ticket/CloseTicketDialog.xaml.cs @@ -176,20 +176,39 @@ namespace FasdDesktopUi.Basics.UserControls } } - private void DropDownClosed(object sender, EventArgs e) - { - try - { - if (!(sender is FrameworkElement senderElement)) - return; - ErrorTypeValueChanged?.Invoke(this, EventArgs.Empty); - var parentBorder = cUiElementHelper.GetFirstParentOfType(senderElement); - cFocusInvoker.InvokeLostFocus(parentBorder, e); - } - catch (Exception E) - { - LogException(E); - } + private void DropDownClosed(object sender, EventArgs e) + { + try + { + if (!(sender is FrameworkElement senderElement)) + return; + ErrorTypeValueChanged?.Invoke(this, EventArgs.Empty); + var parentBorder = cUiElementHelper.GetFirstParentOfType(senderElement); + cFocusInvoker.InvokeLostFocus(parentBorder, e); + + _ = Dispatcher.BeginInvoke((Action)(() => + { + try + { + var parentScrollViewer = cUiElementHelper.GetFirstParentOfType(this); + Keyboard.ClearFocus(); + + if (parentScrollViewer != null) + { + parentScrollViewer.Focus(); + Keyboard.Focus(parentScrollViewer); + } + } + catch (Exception exception) + { + LogException(exception); + } + }), System.Windows.Threading.DispatcherPriority.Input); + } + catch (Exception E) + { + LogException(E); + } } diff --git a/FasdDesktopUi/Basics/UserControls/Ticket/ForwardTicketDialog.xaml b/FasdDesktopUi/Basics/UserControls/Ticket/ForwardTicketDialog.xaml index c3882cf..4b548ec 100644 --- a/FasdDesktopUi/Basics/UserControls/Ticket/ForwardTicketDialog.xaml +++ b/FasdDesktopUi/Basics/UserControls/Ticket/ForwardTicketDialog.xaml @@ -24,6 +24,7 @@ Style="{StaticResource MandatoryFieldBorderStyle}"> @@ -38,6 +39,7 @@ Style="{StaticResource MandatoryFieldBorderStyle}"> diff --git a/FasdDesktopUi/Basics/UserControls/Ticket/HoldTicketDialog.xaml.cs b/FasdDesktopUi/Basics/UserControls/Ticket/HoldTicketDialog.xaml.cs index 88ec08c..1b56e4e 100644 --- a/FasdDesktopUi/Basics/UserControls/Ticket/HoldTicketDialog.xaml.cs +++ b/FasdDesktopUi/Basics/UserControls/Ticket/HoldTicketDialog.xaml.cs @@ -252,20 +252,39 @@ namespace FasdDesktopUi.Basics.UserControls } } - private void DropDownClosed(object sender, EventArgs e) - { - try - { - if (!(sender is FrameworkElement senderElement)) - return; - - var parentBorder = cUiElementHelper.GetFirstParentOfType(senderElement); - cFocusInvoker.InvokeLostFocus(parentBorder, e); - } - catch (Exception E) - { - LogException(E); - } + private void DropDownClosed(object sender, EventArgs e) + { + try + { + if (!(sender is FrameworkElement senderElement)) + return; + + var parentBorder = cUiElementHelper.GetFirstParentOfType(senderElement); + cFocusInvoker.InvokeLostFocus(parentBorder, e); + + _ = Dispatcher.BeginInvoke((Action)(() => + { + try + { + var parentScrollViewer = cUiElementHelper.GetFirstParentOfType(this); + Keyboard.ClearFocus(); + + if (parentScrollViewer != null) + { + parentScrollViewer.Focus(); + Keyboard.Focus(parentScrollViewer); + } + } + catch (Exception exception) + { + LogException(exception); + } + }), System.Windows.Threading.DispatcherPriority.Input); + } + catch (Exception E) + { + LogException(E); + } } public event PropertyChangedEventHandler PropertyChanged;