From 88c5c07dd3400ea2f129014c3ac74c000acb309e Mon Sep 17 00:00:00 2001 From: Niels Laute Date: Wed, 11 Aug 2021 23:28:00 +0200 Subject: [PATCH] Introducing SettingExpander --- .../Controls/Setting/Setting.cs | 17 ++++- .../SettingExpander/SettingExpander.cs | 43 +++++++++++ .../Microsoft.PowerToys.Settings.UI.csproj | 1 + .../Themes/SettingsExpanderStyles.xaml | 3 +- .../Views/AwakePage.xaml | 18 ++--- .../Views/ColorPickerPage.xaml | 24 +++---- .../Views/FancyZonesPage.xaml | 72 +++++++++---------- .../Views/GeneralPage.xaml | 25 ++++--- .../Views/ImageResizerPage.xaml | 16 ++--- .../Views/PowerLauncherPage.xaml | 38 +++++----- .../Views/PowerRenamePage.xaml | 24 +++---- .../Views/ShortcutGuidePage.xaml | 24 +++---- 12 files changed, 179 insertions(+), 126 deletions(-) create mode 100644 src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/SettingExpander/SettingExpander.cs diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/Setting/Setting.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/Setting/Setting.cs index acca823774..c2a9a7d69d 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/Setting/Setting.cs +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/Setting/Setting.cs @@ -3,7 +3,9 @@ // See the LICENSE file in the project root for more information. using System.ComponentModel; +using Windows.UI.Accessibility; using Windows.UI.Xaml; +using Windows.UI.Xaml.Automation; using Windows.UI.Xaml.Controls; namespace Microsoft.PowerToys.Settings.UI.Controls @@ -29,7 +31,7 @@ namespace Microsoft.PowerToys.Settings.UI.Controls "Header", typeof(string), typeof(Setting), - new PropertyMetadata(default(string))); + new PropertyMetadata(default(string), OnHeaderChanged)); public static readonly DependencyProperty DescriptionProperty = DependencyProperty.Register( "Description", @@ -87,6 +89,11 @@ namespace Microsoft.PowerToys.Settings.UI.Controls base.OnApplyTemplate(); } + private static void OnHeaderChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + ((Setting)d).Update(); + } + private static void OnIconChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ((Setting)d).Update(); @@ -114,6 +121,14 @@ namespace Microsoft.PowerToys.Settings.UI.Controls return; } + if (_setting.ActionContent != null) + { + if (!string.IsNullOrEmpty(_setting.Header)) + { + AutomationProperties.SetName((UIElement)_setting.ActionContent, _setting.Header); + } + } + if (_setting._iconPresenter != null) { if (_setting.Icon == null) diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/SettingExpander/SettingExpander.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/SettingExpander/SettingExpander.cs new file mode 100644 index 0000000000..4d8aabcbd9 --- /dev/null +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Controls/SettingExpander/SettingExpander.cs @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.UI.Xaml.Controls; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Automation; + +namespace Microsoft.PowerToys.Settings.UI.Controls +{ + public partial class SettingExpander : Expander + { + public SettingExpander() + { + DefaultStyleKey = typeof(Expander); + this.Style = (Style)App.Current.Resources["SettingExpanderStyle"]; + this.RegisterPropertyChangedCallback(Expander.HeaderProperty, OnHeaderChanged); + } + + private static void OnHeaderChanged(DependencyObject d, DependencyProperty dp) + { + SettingExpander self = (SettingExpander)d; + if (self.Header != null) + { + if (self.Header.GetType() == typeof(Setting)) + { + Setting selfSetting = (Setting)self.Header; + selfSetting.Style = (Style)App.Current.Resources["ExpanderHeaderSettingStyle"]; + + if (!string.IsNullOrEmpty(selfSetting.Header)) + { + AutomationProperties.SetName(self, selfSetting.Header); + } + } + } + } + } +} diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Microsoft.PowerToys.Settings.UI.csproj b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Microsoft.PowerToys.Settings.UI.csproj index bd4c70e2ef..8360224979 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Microsoft.PowerToys.Settings.UI.csproj +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Microsoft.PowerToys.Settings.UI.csproj @@ -99,6 +99,7 @@ HotkeySettingsControl.xaml + diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Themes/SettingsExpanderStyles.xaml b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Themes/SettingsExpanderStyles.xaml index 85d4b558fd..a8ee04e2b1 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI/Themes/SettingsExpanderStyles.xaml +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI/Themes/SettingsExpanderStyles.xaml @@ -32,7 +32,8 @@ -