diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs b/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs index 7e244439..9d7c17d4 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs @@ -8,7 +8,7 @@ namespace HandyControlDemo.Properties.Langs { public class LangProvider : INotifyPropertyChanged { - internal static LangProvider Instance => ResourceHelper.GetResource("DemoLangs"); + internal static LangProvider Instance { get; } = ResourceHelper.GetResource("DemoLangs"); private static string CultureInfoStr; diff --git a/src/Shared/HandyControl_Shared/Controls/Other/TransitioningContentControl.cs b/src/Shared/HandyControl_Shared/Controls/Other/TransitioningContentControl.cs index c5d07cfb..979178cd 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/TransitioningContentControl.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/TransitioningContentControl.cs @@ -11,10 +11,14 @@ namespace HandyControl.Controls { private FrameworkElement _contentPresenter; + private static Storyboard StoryboardBuildInDefault; + + private Storyboard _storyboardBuildIn; + public TransitioningContentControl() { Loaded += TransitioningContentControl_Loaded; - IsVisibleChanged += TransitioningContentControl_IsVisibleChanged; + Unloaded += TransitioningContentControl_Unloaded; } public static readonly DependencyProperty TransitionModeProperty = DependencyProperty.Register( @@ -23,7 +27,13 @@ namespace HandyControl.Controls private static void OnTransitionModeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var ctl = (TransitioningContentControl) d; - ctl.StartTransition(); + ctl.OnTransitionModeChanged((TransitionMode) e.NewValue); + } + + private void OnTransitionModeChanged(TransitionMode newValue) + { + _storyboardBuildIn = ResourceHelper.GetResourceInternal($"{newValue}Transition"); + StartTransition(); } public TransitionMode TransitionMode @@ -43,19 +53,33 @@ namespace HandyControl.Controls private void TransitioningContentControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) => StartTransition(); - private void TransitioningContentControl_Loaded(object sender, RoutedEventArgs e) => StartTransition(); + private void TransitioningContentControl_Loaded(object sender, RoutedEventArgs e) + { + StartTransition(); + IsVisibleChanged += TransitioningContentControl_IsVisibleChanged; + } + + private void TransitioningContentControl_Unloaded(object sender, RoutedEventArgs e) + { + IsVisibleChanged -= TransitioningContentControl_IsVisibleChanged; + } private void StartTransition() { - if (Visibility != Visibility.Visible || _contentPresenter == null) return; + if (!IsArrangeValid || _contentPresenter == null) return; if (TransitionStoryboard != null) { TransitionStoryboard.Begin(_contentPresenter); } - else if (Application.Current != null) + else if (_storyboardBuildIn != null) { - ResourceHelper.GetResourceInternal($"{TransitionMode.ToString()}Transition")?.Begin(_contentPresenter); + _storyboardBuildIn?.Begin(_contentPresenter); + } + else + { + StoryboardBuildInDefault ??= ResourceHelper.GetResourceInternal($"{default(TransitionMode)}Transition"); + StoryboardBuildInDefault?.Begin(_contentPresenter); } } diff --git a/src/Shared/HandyControl_Shared/Properties/Langs/LangProvider.cs b/src/Shared/HandyControl_Shared/Properties/Langs/LangProvider.cs index 5b053af1..1a2e4b8f 100644 --- a/src/Shared/HandyControl_Shared/Properties/Langs/LangProvider.cs +++ b/src/Shared/HandyControl_Shared/Properties/Langs/LangProvider.cs @@ -8,7 +8,7 @@ namespace HandyControl.Properties.Langs { public class LangProvider : INotifyPropertyChanged { - internal static LangProvider Instance => ResourceHelper.GetResourceInternal("Langs"); + internal static LangProvider Instance { get; } = ResourceHelper.GetResourceInternal("Langs"); private static string CultureInfoStr; diff --git a/src/Shared/HandyControl_Shared/Tools/Helper/ResourceHelper.cs b/src/Shared/HandyControl_Shared/Tools/Helper/ResourceHelper.cs index 3eef1295..b357a5ce 100644 --- a/src/Shared/HandyControl_Shared/Tools/Helper/ResourceHelper.cs +++ b/src/Shared/HandyControl_Shared/Tools/Helper/ResourceHelper.cs @@ -79,13 +79,20 @@ namespace HandyControl.Tools Source = new Uri($"pack://application:,,,/HandyControl;component/Themes/Skin{skin}.xaml") }; + private static ResourceDictionary HcTheme; + /// /// get HandyControl theme /// /// - public static ResourceDictionary GetTheme() => new Lazy(() => new ResourceDictionary + public static ResourceDictionary GetTheme() { - Source = new Uri("pack://application:,,,/HandyControl;component/Themes/Theme.xaml") - }).Value; + HcTheme ??= new ResourceDictionary + { + Source = new Uri("pack://application:,,,/HandyControl;component/Themes/Theme.xaml") + }; + + return HcTheme; + } } } diff --git a/src/Shared/HandyControl_Shared/Tools/StyleSelector/ButtonGroupItemStyleSelector.cs b/src/Shared/HandyControl_Shared/Tools/StyleSelector/ButtonGroupItemStyleSelector.cs index d8e9e161..7877494b 100644 --- a/src/Shared/HandyControl_Shared/Tools/StyleSelector/ButtonGroupItemStyleSelector.cs +++ b/src/Shared/HandyControl_Shared/Tools/StyleSelector/ButtonGroupItemStyleSelector.cs @@ -1,4 +1,5 @@ -using System.Windows; +using System.Collections.Generic; +using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using HandyControl.Controls; @@ -8,6 +9,30 @@ namespace HandyControl.Tools { public class ButtonGroupItemStyleSelector : StyleSelector { + private static readonly Dictionary StyleDict = new() + { + [ResourceToken.RadioGroupItemSingle] = ResourceHelper.GetResourceInternal