diff --git a/src/MaterialDesignThemes.Wpf/SliderAssist.cs b/src/MaterialDesignThemes.Wpf/SliderAssist.cs index e6dbe94edf..c7e174f6d6 100644 --- a/src/MaterialDesignThemes.Wpf/SliderAssist.cs +++ b/src/MaterialDesignThemes.Wpf/SliderAssist.cs @@ -1,4 +1,6 @@ -namespace MaterialDesignThemes.Wpf; +using System.Windows.Media; + +namespace MaterialDesignThemes.Wpf; public static class SliderAssist { @@ -21,12 +23,12 @@ public static readonly DependencyProperty OnlyShowFocusVisualWhileDraggingProper typeof(SliderAssist), new PropertyMetadata(false)); - public static void SetOnlyShowFocusVisualWhileDragging(RangeBase element, bool value) - => element.SetValue(OnlyShowFocusVisualWhileDraggingProperty, value); - public static bool GetOnlyShowFocusVisualWhileDragging(RangeBase element) => (bool)element.GetValue(OnlyShowFocusVisualWhileDraggingProperty); + public static void SetOnlyShowFocusVisualWhileDragging(RangeBase element, bool value) + => element.SetValue(OnlyShowFocusVisualWhileDraggingProperty, value); + public static readonly DependencyProperty ToolTipFormatProperty = DependencyProperty.RegisterAttached( "ToolTipFormat", @@ -34,9 +36,49 @@ public static readonly DependencyProperty ToolTipFormatProperty typeof(SliderAssist), new PropertyMetadata(null)); + public static string GetToolTipFormat(RangeBase element) + => (string)element.GetValue(ToolTipFormatProperty); + public static void SetToolTipFormat(RangeBase element, string value) => element.SetValue(ToolTipFormatProperty, value); - public static string GetToolTipFormat(RangeBase element) - => (string)element.GetValue(ToolTipFormatProperty); + // Fix for Issue3628 + public static readonly DependencyProperty FocusSliderOnClickProperty = + DependencyProperty.RegisterAttached( + "FocusSliderOnClick", + typeof(bool), + typeof(SliderAssist), + new PropertyMetadata(false, OnFocusSliderOnClickChanged)); + + public static bool GetFocusSliderOnClick(RangeBase obj) => + (bool)obj.GetValue(FocusSliderOnClickProperty); + + public static void SetFocusSliderOnClick(RangeBase obj, bool value) => + obj.SetValue(FocusSliderOnClickProperty, value); + + private static void OnFocusSliderOnClickChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is Slider slider) + { + if ((bool)e.NewValue) + { + slider.AddHandler(UIElement.PreviewMouseLeftButtonDownEvent, + (MouseButtonEventHandler)Slider_PreviewMouseLeftButtonDown, + true); + } + else + { + slider.RemoveHandler(UIElement.PreviewMouseLeftButtonDownEvent, + (MouseButtonEventHandler)Slider_PreviewMouseLeftButtonDown); + } + } + } + + private static void Slider_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) + { + if (sender is Slider slider) + { + slider.Focus(); + } + } } diff --git a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.Slider.xaml b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.Slider.xaml index 970f59e843..53a3334493 100644 --- a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.Slider.xaml +++ b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.Slider.xaml @@ -1,4 +1,4 @@ - @@ -993,6 +993,7 @@ + @@ -1015,6 +1016,7 @@ + diff --git a/tests/MaterialDesignThemes.UITests/WPF/TextBoxes/TextBoxTests.cs b/tests/MaterialDesignThemes.UITests/WPF/TextBoxes/TextBoxTests.cs index 8a7be36c8c..6066e1387a 100644 --- a/tests/MaterialDesignThemes.UITests/WPF/TextBoxes/TextBoxTests.cs +++ b/tests/MaterialDesignThemes.UITests/WPF/TextBoxes/TextBoxTests.cs @@ -318,9 +318,12 @@ public async Task ContextMenu_FollowsTextBoxFontFamily() var contextMenu = await textBox.GetElement(".ContextMenu"); - var textBoxFont = await textBox.GetFontFamily(); - Assert.Equal("Times New Roman", textBoxFont?.FamilyNames.Values.First()); - Assert.Equal(textBoxFont, await contextMenu.GetFontFamily()); + FontFamily? textBoxFont = await textBox.GetFontFamily(); + Assert.Contains("Times New Roman", textBoxFont?.FamilyNames.Values ?? []); + await Wait.For(async () => + { + Assert.Equal(textBoxFont, await contextMenu.GetFontFamily()); + }); recorder.Success(); }