diff --git a/GitInfo.txt b/GitInfo.txt index a72dbfd683ef..ce609cd109da 100644 --- a/GitInfo.txt +++ b/GitInfo.txt @@ -1 +1 @@ -6.0.100-ci.main \ No newline at end of file +6.0.100-preview.4 \ No newline at end of file diff --git a/src/Compatibility/Core/src/WinUI/SliderRenderer.cs b/src/Compatibility/Core/src/WinUI/SliderRenderer.cs index 8d4394232745..4c835f2b9ace 100644 --- a/src/Compatibility/Core/src/WinUI/SliderRenderer.cs +++ b/src/Compatibility/Core/src/WinUI/SliderRenderer.cs @@ -228,16 +228,19 @@ void UpdateFlowDirection() protected override bool PreventGestureBubbling { get; set; } = true; + [PortHandler] void OnNativeValueChanged(object sender, RangeBaseValueChangedEventArgs e) { ((IElementController)Element).SetValueFromRenderer(Slider.ValueProperty, e.NewValue); } + [PortHandler] void OnPointerPressed(object sender, PointerRoutedEventArgs e) { ((ISliderController)Element)?.SendDragStarted(); } + [PortHandler] void OnPointerReleased(object sender, PointerRoutedEventArgs e) { ((ISliderController)Element)?.SendDragCompleted(); diff --git a/src/Controls/samples/Controls.Sample/Pages/MainPage.cs b/src/Controls/samples/Controls.Sample/Pages/MainPage.cs index c5762495e41d..bd958c45e31a 100644 --- a/src/Controls/samples/Controls.Sample/Pages/MainPage.cs +++ b/src/Controls/samples/Controls.Sample/Pages/MainPage.cs @@ -337,4 +337,4 @@ void AddTextResizeDemo(Microsoft.Maui.ILayout layout) layout.Add(explicitWidthTestLabel); } } -} \ No newline at end of file +} diff --git a/src/Controls/src/Core/AppHostBuilderExtensions.cs b/src/Controls/src/Core/AppHostBuilderExtensions.cs index 85b3069435cb..89265b7c40d9 100644 --- a/src/Controls/src/Core/AppHostBuilderExtensions.cs +++ b/src/Controls/src/Core/AppHostBuilderExtensions.cs @@ -27,10 +27,10 @@ private static void ConfigureNativeServices(HostBuilderContext arg1, IServiceCol if (!UI.Xaml.Application.Current.Resources.ContainsKey("MauiControlsPageControlStyle")) { var myResourceDictionary = new Microsoft.UI.Xaml.ResourceDictionary(); - myResourceDictionary.Source = new Uri("ms-appx:///Microsoft.Maui.Controls/Maui/Platform/Windows/Styles/Resources.xbf"); + myResourceDictionary.Source = new Uri("ms-appx:///Microsoft.Maui.Controls/Platform/Windows/Styles/Resources.xbf"); Microsoft.UI.Xaml.Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary); } #endif } } -} \ No newline at end of file +} diff --git a/src/Core/src/Handlers/Slider/SliderHandler.Windows.cs b/src/Core/src/Handlers/Slider/SliderHandler.Windows.cs index efc8db5ad905..78e9074cc057 100644 --- a/src/Core/src/Handlers/Slider/SliderHandler.Windows.cs +++ b/src/Core/src/Handlers/Slider/SliderHandler.Windows.cs @@ -1,5 +1,8 @@ #nullable enable +using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Controls.Primitives; +using Microsoft.UI.Xaml.Input; using Microsoft.UI.Xaml.Media; namespace Microsoft.Maui.Handlers @@ -8,6 +11,9 @@ public partial class SliderHandler : ViewHandler { static Brush? DefaultForegroundColor; static Brush? DefaultBackgroundColor; + + PointerEventHandler? _pointerPressedHandler; + PointerEventHandler? _pointerReleasedHandler; protected override Slider CreateNativeView() { @@ -19,6 +25,30 @@ protected override Slider CreateNativeView() return slider; } + protected override void ConnectHandler(Slider nativeView) + { + nativeView.ValueChanged += OnNativeValueChanged; + + _pointerPressedHandler = new PointerEventHandler(OnPointerPressed); + _pointerReleasedHandler = new PointerEventHandler(OnPointerReleased); + + nativeView.AddHandler(UIElement.PointerPressedEvent, _pointerPressedHandler, true); + nativeView.AddHandler(UIElement.PointerReleasedEvent, _pointerReleasedHandler, true); + nativeView.AddHandler(UIElement.PointerCanceledEvent, _pointerReleasedHandler, true); + } + + protected override void DisconnectHandler(Slider nativeView) + { + nativeView.ValueChanged -= OnNativeValueChanged; + + nativeView.RemoveHandler(UIElement.PointerPressedEvent, _pointerPressedHandler); + nativeView.RemoveHandler(UIElement.PointerReleasedEvent, _pointerReleasedHandler); + nativeView.RemoveHandler(UIElement.PointerCanceledEvent, _pointerReleasedHandler); + + _pointerPressedHandler = null; + _pointerReleasedHandler = null; + } + protected override void SetupDefaults(Slider nativeView) { DefaultForegroundColor = nativeView.Foreground; @@ -52,5 +82,21 @@ public static void MapMaximumTrackColor(SliderHandler handler, ISlider slider) [MissingMapper] public static void MapThumbColor(SliderHandler handler, ISlider slider) { } + + void OnNativeValueChanged(object? sender, RangeBaseValueChangedEventArgs e) + { + if (VirtualView != null) + VirtualView.Value = e.NewValue; + } + + void OnPointerPressed(object? sender, PointerRoutedEventArgs e) + { + VirtualView?.DragStarted(); + } + + void OnPointerReleased(object? sender, PointerRoutedEventArgs e) + { + VirtualView?.DragCompleted(); + } } } \ No newline at end of file diff --git a/src/Core/src/Platform/Windows/SliderExtensions.cs b/src/Core/src/Platform/Windows/SliderExtensions.cs index 664d55cd55fd..4dd53ce8dfc7 100644 --- a/src/Core/src/Platform/Windows/SliderExtensions.cs +++ b/src/Core/src/Platform/Windows/SliderExtensions.cs @@ -1,4 +1,5 @@ #nullable enable +using System; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Media; @@ -6,14 +7,23 @@ namespace Microsoft.Maui { public static class SliderExtensions { + static void UpdateIncrement(this Slider nativeSlider, ISlider slider) + { + double stepping = Math.Min((slider.Maximum - slider.Minimum) / 1000, 1); + nativeSlider.StepFrequency = stepping; + nativeSlider.SmallChange = stepping; + } + public static void UpdateMinimum(this Slider nativeSlider, ISlider slider) { nativeSlider.Minimum = slider.Minimum; + nativeSlider.UpdateIncrement(slider); } public static void UpdateMaximum(this Slider nativeSlider, ISlider slider) { nativeSlider.Maximum = slider.Maximum; + nativeSlider.UpdateIncrement(slider); } public static void UpdateValue(this Slider nativeSlider, ISlider slider)