From df7a83c3499db862041d7996b089371e37b97085 Mon Sep 17 00:00:00 2001 From: mntone Date: Wed, 11 Jan 2023 16:34:52 +0900 Subject: [PATCH] Fixes an issue of SettingsExpander. - SettingsExpander doesn't update visual state when `Description` and `HeaderIcon` was changed. - Change SettingsExpander focus visual position from the card to the expander button. - And stability improvements. --- src/AngelUmbrella.vcxproj | 1 + src/AngelUmbrella.vcxproj.filters | 1 + src/Themes/Generic.xaml | 16 +++++++------- src/UI/Controls/SettingsCard.xaml | 22 +++++++++++++------ src/UI/Controls/SettingsCard.xaml.cpp | 8 +------ .../Controls/SettingsCard_themeresources.xaml | 5 +++-- src/UI/Controls/SettingsExpander.xaml | 18 ++++++++++----- src/UI/Controls/SettingsExpander.xaml.cpp | 8 +------ .../SettingsExpander.xaml.properties.cpp | 12 ++++++++-- src/UI/Controls/SettingsPanel.xaml | 12 ++++------ src/UI/Controls/SettingsPanel.xaml.cpp | 8 +------ src/version.props | 2 +- 12 files changed, 59 insertions(+), 54 deletions(-) diff --git a/src/AngelUmbrella.vcxproj b/src/AngelUmbrella.vcxproj index 4b35525..219a4ba 100644 --- a/src/AngelUmbrella.vcxproj +++ b/src/AngelUmbrella.vcxproj @@ -125,6 +125,7 @@ + diff --git a/src/AngelUmbrella.vcxproj.filters b/src/AngelUmbrella.vcxproj.filters index 23454ea..687b25c 100644 --- a/src/AngelUmbrella.vcxproj.filters +++ b/src/AngelUmbrella.vcxproj.filters @@ -20,6 +20,7 @@ + diff --git a/src/Themes/Generic.xaml b/src/Themes/Generic.xaml index 02f2606..aae546f 100644 --- a/src/Themes/Generic.xaml +++ b/src/Themes/Generic.xaml @@ -119,7 +119,7 @@ + Value="{StaticResource SettingsCardPadding}" /> @@ -339,14 +340,12 @@ ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" - VerticalAlignment="{TemplateBinding VerticalContentAlignment}" - Margin="{TemplateBinding Padding}" /> + VerticalAlignment="{TemplateBinding VerticalContentAlignment}" /> + VerticalAlignment="Center" + Width="{StaticResource SettingsCardActionButtonWidth}" /> diff --git a/src/UI/Controls/SettingsCard.xaml b/src/UI/Controls/SettingsCard.xaml index 4dabf7d..8afb738 100644 --- a/src/UI/Controls/SettingsCard.xaml +++ b/src/UI/Controls/SettingsCard.xaml @@ -128,6 +128,8 @@ + @@ -176,7 +178,8 @@ FontSize="{StaticResource SettingsCardDescriptionFontSize}" Foreground="{ThemeResource TextFillColorSecondaryBrush}" Margin="0,0,0,-1" - TextWrapping="Wrap" /> + TextWrapping="Wrap" + Visibility="Collapsed" /> + Margin="{StaticResource SettingsCardActionButtonMargin}" + ToolTipService.ToolTip="{TemplateBinding ActionIconTooltip}" + VerticalAlignment="Center" + VerticalContentAlignment="Center" + Width="{StaticResource SettingsCardActionButtonWidth}"> - + VerticalAlignment="Center"> + diff --git a/src/UI/Controls/SettingsCard.xaml.cpp b/src/UI/Controls/SettingsCard.xaml.cpp index 2d5bd96..4fe0cee 100644 --- a/src/UI/Controls/SettingsCard.xaml.cpp +++ b/src/UI/Controls/SettingsCard.xaml.cpp @@ -138,13 +138,7 @@ void SettingsCard::OnButtonIconChanged(bool isClickEnabled) { void SettingsCard::OnDescriptionChanged(IInspectable const& newValue) { FrameworkElement element { GetTemplateChild(controls::Description).try_as() }; if (element) { - if (ValueHelper::HasValue(newValue)) { - element.Visibility(Visibility::Visible); - VisualStateManager::GoToState(*this, states::HeaderAndDescription, true); - } else { - element.Visibility(Visibility::Collapsed); - VisualStateManager::GoToState(*this, states::HeaderOnly, true); - } + VisualStateManager::GoToState(*this, ValueHelper::HasValue(newValue) ? states::HeaderAndDescription : states::HeaderOnly, true); } } diff --git a/src/UI/Controls/SettingsCard_themeresources.xaml b/src/UI/Controls/SettingsCard_themeresources.xaml index 6b63c58..a553676 100644 --- a/src/UI/Controls/SettingsCard_themeresources.xaml +++ b/src/UI/Controls/SettingsCard_themeresources.xaml @@ -100,8 +100,9 @@ 1000 160 48 - 32 - 32 + 4,-15,-12,-15 + 40 + 40 12 20 16 diff --git a/src/UI/Controls/SettingsExpander.xaml b/src/UI/Controls/SettingsExpander.xaml index 908d912..d864144 100644 --- a/src/UI/Controls/SettingsExpander.xaml +++ b/src/UI/Controls/SettingsExpander.xaml @@ -128,12 +128,17 @@ FontFamily="{StaticResource SymbolThemeFontFamily}" FontSize="12" Foreground="{TemplateBinding Foreground}" + Height="{StaticResource SettingsCardActionButtonHeight}" HighContrastAdjustment="None" HorizontalAlignment="Right" - IsTabStop="False" + HorizontalContentAlignment="Center" + IsTabStop="True" IsTextScaleFactorEnabled="False" - Margin="12,0,-4,0" - VerticalAlignment="Center"> + Margin="{StaticResource SettingsCardActionButtonMargin}" + UseSystemFocusVisuals="{TemplateBinding UseSystemFocusVisuals}" + VerticalAlignment="Center" + VerticalContentAlignment="Center" + Width="{StaticResource SettingsCardActionButtonWidth}"> + @@ -335,7 +342,7 @@ HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" IsChecked="{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" IsEnabled="{TemplateBinding IsEnabled}" - IsTabStop="True" + IsTabStop="False" MinHeight="{TemplateBinding MinHeight}" Padding="{TemplateBinding Padding}" Style="{StaticResource SettingsExpanderHeaderDownStyle}"> @@ -375,7 +382,8 @@ FontSize="{StaticResource SettingsCardDescriptionFontSize}" Foreground="{ThemeResource TextFillColorSecondaryBrush}" Margin="0,0,0,-1" - TextWrapping="Wrap" /> + TextWrapping="Wrap" + Visibility="Collapsed" /> () }; if (element) { - if (ValueHelper::HasValue(newValue)) { - element.Visibility(Visibility::Visible); - VisualStateManager::GoToState(*this, states::HeaderAndDescription, true); - } else { - element.Visibility(Visibility::Collapsed); - VisualStateManager::GoToState(*this, states::HeaderOnly, true); - } + VisualStateManager::GoToState(*this, ValueHelper::HasValue(newValue) ? states::HeaderAndDescription : states::HeaderOnly, true); } } diff --git a/src/UI/Controls/SettingsExpander.xaml.properties.cpp b/src/UI/Controls/SettingsExpander.xaml.properties.cpp index bc13590..b1c2092 100644 --- a/src/UI/Controls/SettingsExpander.xaml.properties.cpp +++ b/src/UI/Controls/SettingsExpander.xaml.properties.cpp @@ -20,11 +20,19 @@ void SettingsExpander::DependencyProperties::DelayInitIfNeeded() { DEFINE_PARENT_TYPENAME(SettingsExpander); - DEFINE_DP(Description, winrt::IInspectable, SettingsExpander); + DEFINE_DP_CALLBACK( + Description, + winrt::IInspectable, + SettingsExpander, + &SettingsExpander::OnDescriptionChangedStatic); DEFINE_DP(ExpanderContent, winrt::IInspectable, SettingsExpander); - DEFINE_DP(HeaderIcon, winrt::Microsoft::UI::Xaml::Controls::IconElement, SettingsExpander); + DEFINE_DP_CALLBACK( + HeaderIcon, + winrt::Microsoft::UI::Xaml::Controls::IconElement, + SettingsExpander, + &SettingsExpander::OnHeaderIconChangedStatic); DEFINE_DP_METADATA( Orientation, diff --git a/src/UI/Controls/SettingsPanel.xaml b/src/UI/Controls/SettingsPanel.xaml index 1ae9bd1..670e851 100644 --- a/src/UI/Controls/SettingsPanel.xaml +++ b/src/UI/Controls/SettingsPanel.xaml @@ -23,10 +23,6 @@ Value="Right" /> - - @@ -58,6 +52,8 @@ + @@ -91,7 +87,6 @@ + TextWrapping="Wrap" + Visibility="Collapsed" /> () }; if (element) { - if (ValueHelper::HasValue(newValue)) { - element.Visibility(Visibility::Visible); - VisualStateManager::GoToState(*this, states::HeaderAndDescription, true); - } else { - element.Visibility(Visibility::Collapsed); - VisualStateManager::GoToState(*this, states::HeaderOnly, true); - } + VisualStateManager::GoToState(*this, ValueHelper::HasValue(newValue) ? states::HeaderAndDescription : states::HeaderOnly, true); } } diff --git a/src/version.props b/src/version.props index f7a4e16..987e5f7 100644 --- a/src/version.props +++ b/src/version.props @@ -3,7 +3,7 @@ 1 0 - 0 + 1 0 0