Skip to content

Commit e550104

Browse files
committed
Moving assist to be on the slider itself
This allow fixes it when the slider has a background color, or the user clicks on the ticks above/below the track
1 parent da7baa3 commit e550104

File tree

3 files changed

+26
-45
lines changed

3 files changed

+26
-45
lines changed

src/MaterialDesignThemes.Wpf/SliderAssist.cs

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,64 +23,62 @@ public static readonly DependencyProperty OnlyShowFocusVisualWhileDraggingProper
2323
typeof(SliderAssist),
2424
new PropertyMetadata(false));
2525

26-
public static void SetOnlyShowFocusVisualWhileDragging(RangeBase element, bool value)
27-
=> element.SetValue(OnlyShowFocusVisualWhileDraggingProperty, value);
28-
2926
public static bool GetOnlyShowFocusVisualWhileDragging(RangeBase element)
3027
=> (bool)element.GetValue(OnlyShowFocusVisualWhileDraggingProperty);
3128

29+
public static void SetOnlyShowFocusVisualWhileDragging(RangeBase element, bool value)
30+
=> element.SetValue(OnlyShowFocusVisualWhileDraggingProperty, value);
31+
3232
public static readonly DependencyProperty ToolTipFormatProperty
3333
= DependencyProperty.RegisterAttached(
3434
"ToolTipFormat",
3535
typeof(string),
3636
typeof(SliderAssist),
3737
new PropertyMetadata(null));
3838

39-
public static void SetToolTipFormat(RangeBase element, string value)
40-
=> element.SetValue(ToolTipFormatProperty, value);
41-
4239
public static string GetToolTipFormat(RangeBase element)
4340
=> (string)element.GetValue(ToolTipFormatProperty);
4441

45-
#region Issue3628
46-
internal static readonly DependencyProperty FocusParentSliderOnClickProperty =
42+
public static void SetToolTipFormat(RangeBase element, string value)
43+
=> element.SetValue(ToolTipFormatProperty, value);
44+
45+
// Fix for Issue3628
46+
public static readonly DependencyProperty FocusSliderOnClickProperty =
4747
DependencyProperty.RegisterAttached(
48-
"FocusParentSliderOnClick",
48+
"FocusSliderOnClick",
4949
typeof(bool),
5050
typeof(SliderAssist),
51-
new PropertyMetadata(false, OnFocusParentSliderOnClickChanged));
51+
new PropertyMetadata(false, OnFocusSliderOnClickChanged));
5252

53-
internal static bool GetFocusParentSliderOnClick(DependencyObject obj) =>
54-
(bool)obj.GetValue(FocusParentSliderOnClickProperty);
53+
public static bool GetFocusSliderOnClick(RangeBase obj) =>
54+
(bool)obj.GetValue(FocusSliderOnClickProperty);
5555

56-
internal static void SetFocusParentSliderOnClick(DependencyObject obj, bool value) =>
57-
obj.SetValue(FocusParentSliderOnClickProperty, value);
56+
public static void SetFocusSliderOnClick(RangeBase obj, bool value) =>
57+
obj.SetValue(FocusSliderOnClickProperty, value);
5858

59-
private static void OnFocusParentSliderOnClickChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
59+
private static void OnFocusSliderOnClickChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
6060
{
61-
if (d is RepeatButton repeatButton)
61+
if (d is Slider slider)
6262
{
6363
if ((bool)e.NewValue)
6464
{
65-
repeatButton.AddHandler(UIElement.PreviewMouseLeftButtonDownEvent,
66-
(MouseButtonEventHandler)RepeatButton_PreviewMouseLeftButtonDown,
65+
slider.AddHandler(UIElement.PreviewMouseLeftButtonDownEvent,
66+
(MouseButtonEventHandler)Slider_PreviewMouseLeftButtonDown,
6767
true);
6868
}
6969
else
7070
{
71-
repeatButton.RemoveHandler(UIElement.PreviewMouseLeftButtonDownEvent,
72-
(MouseButtonEventHandler)RepeatButton_PreviewMouseLeftButtonDown);
71+
slider.RemoveHandler(UIElement.PreviewMouseLeftButtonDownEvent,
72+
(MouseButtonEventHandler)Slider_PreviewMouseLeftButtonDown);
7373
}
7474
}
7575
}
7676

77-
private static void RepeatButton_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
77+
private static void Slider_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
7878
{
79-
if (sender is DependencyObject repeatButton)
79+
if (sender is Slider slider)
8080
{
81-
var slider = TreeHelper.FindParent<Slider>(repeatButton);
82-
slider?.Focus();
81+
slider.Focus();
8382
}
8483
}
85-
#endregion
8684
}

src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.Slider.xaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
1+
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
33
xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters"
44
xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf">
@@ -17,7 +17,6 @@
1717
<Setter Property="Focusable" Value="False" />
1818
<Setter Property="IsTabStop" Value="False" />
1919
<Setter Property="OverridesDefaultStyle" Value="True" />
20-
<Setter Property="wpf:SliderAssist.FocusParentSliderOnClick" Value="True"/>
2120
<Setter Property="Template">
2221
<Setter.Value>
2322
<ControlTemplate TargetType="{x:Type RepeatButton}">
@@ -994,6 +993,7 @@
994993
<Setter Property="Template" Value="{StaticResource MaterialDesignDiscreteSliderHorizontal}" />
995994
<Setter Property="UseLayoutRounding" Value="False" />
996995
<Setter Property="wpf:ElevationAssist.Elevation" Value="Dp1" />
996+
<Setter Property="wpf:SliderAssist.FocusSliderOnClick" Value="True" />
997997
<Style.Triggers>
998998
<Trigger Property="IsEnabled" Value="False">
999999
<Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.CheckBox.Disabled}" />
@@ -1016,6 +1016,7 @@
10161016
<Setter Property="Template" Value="{StaticResource MaterialDesignDiscreteSliderVertical}" />
10171017
<Setter Property="UseLayoutRounding" Value="False" />
10181018
<Setter Property="wpf:ElevationAssist.Elevation" Value="Dp1" />
1019+
<Setter Property="wpf:SliderAssist.FocusSliderOnClick" Value="True" />
10191020
<Style.Triggers>
10201021
<Trigger Property="IsEnabled" Value="False">
10211022
<Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.CheckBox.Disabled}" />

src/MaterialDesignThemes.Wpf/TreeHelper.cs

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -144,22 +144,4 @@ private static bool IsAncestorTill(FrameworkElement? element, object ancestor, o
144144
}
145145
return foundChild;
146146
}
147-
148-
public static T FindParent<T>(DependencyObject child) where T : DependencyObject
149-
{
150-
DependencyObject parentObject = VisualTreeHelper.GetParent(child);
151-
if (parentObject is null)
152-
{
153-
return null!;
154-
}
155-
156-
if (parentObject is T parent)
157-
{
158-
return parent;
159-
}
160-
else
161-
{
162-
return FindParent<T>(parentObject);
163-
}
164-
}
165147
}

0 commit comments

Comments
 (0)