memory optimization

This commit is contained in:
NaBian committed 2021-06-10 00:40:13 +08:00
1 parent 5afb569d11
commit 1ec8cb521c
5 files changed
+92 -36

No files matched your search

@@ -79,13 +79,20 @@ namespace HandyControl.Tools
Source = new Uri($"pack://application:,,,/HandyControl;component/Themes/Skin{skin}.xaml")
};
private static ResourceDictionary HcTheme;
/// <summary>
/// get HandyControl theme
/// </summary>
/// <returns></returns>
public static ResourceDictionary GetTheme() => new Lazy<ResourceDictionary>(() => 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;
}
}
}
@@ -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<string, Style> StyleDict = new()
{
[ResourceToken.RadioGroupItemSingle] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.RadioGroupItemSingle),
[ResourceToken.RadioGroupItemHorizontalFirst] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.RadioGroupItemHorizontalFirst),
[ResourceToken.RadioGroupItemHorizontalLast] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.RadioGroupItemHorizontalLast),
[ResourceToken.RadioGroupItemVerticalFirst] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.RadioGroupItemVerticalFirst),
[ResourceToken.RadioGroupItemVerticalLast] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.RadioGroupItemVerticalLast),
[ResourceToken.RadioGroupItemDefault] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.RadioGroupItemDefault),
[ResourceToken.ButtonGroupItemSingle] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.ButtonGroupItemSingle),
[ResourceToken.ButtonGroupItemHorizontalFirst] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.ButtonGroupItemHorizontalFirst),
[ResourceToken.ButtonGroupItemHorizontalLast] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.ButtonGroupItemHorizontalLast),
[ResourceToken.ButtonGroupItemVerticalFirst] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.ButtonGroupItemVerticalFirst),
[ResourceToken.ButtonGroupItemVerticalLast] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.ButtonGroupItemVerticalLast),
[ResourceToken.ButtonGroupItemDefault] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.ButtonGroupItemDefault),
[ResourceToken.ToggleButtonGroupItemSingle] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.ToggleButtonGroupItemSingle),
[ResourceToken.ToggleButtonGroupItemHorizontalFirst] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.ToggleButtonGroupItemHorizontalFirst),
[ResourceToken.ToggleButtonGroupItemHorizontalLast] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.ToggleButtonGroupItemHorizontalLast),
[ResourceToken.ToggleButtonGroupItemVerticalFirst] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.ToggleButtonGroupItemVerticalFirst),
[ResourceToken.ToggleButtonGroupItemVerticalLast] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.ToggleButtonGroupItemVerticalLast),
[ResourceToken.ToggleButtonGroupItemDefault] = ResourceHelper.GetResourceInternal<Style>(ResourceToken.ToggleButtonGroupItemDefault)
};
public override Style SelectStyle(object item, DependencyObject container)
{
if (container is ButtonGroup buttonGroup && item is ButtonBase buttonBase)
@@ -16,67 +41,67 @@ namespace HandyControl.Tools
switch (buttonBase)
{
case RadioButton _:
case RadioButton:
{
if (count == 1)
{
return ResourceHelper.GetResourceInternal<Style>(ResourceToken.RadioGroupItemSingle);
return StyleDict[ResourceToken.RadioGroupItemSingle];
}
var index = buttonGroup.Items.IndexOf(buttonBase);
return buttonGroup.Orientation == Orientation.Horizontal
? index == 0
? ResourceHelper.GetResourceInternal<Style>(ResourceToken.RadioGroupItemHorizontalFirst)
: ResourceHelper.GetResourceInternal<Style>(index == count - 1
? StyleDict[ResourceToken.RadioGroupItemHorizontalFirst]
: StyleDict[index == count - 1
? ResourceToken.RadioGroupItemHorizontalLast
: ResourceToken.RadioGroupItemDefault)
: ResourceToken.RadioGroupItemDefault]
: index == 0
? ResourceHelper.GetResourceInternal<Style>(ResourceToken.RadioGroupItemVerticalFirst)
: ResourceHelper.GetResourceInternal<Style>(index == count - 1
? StyleDict[ResourceToken.RadioGroupItemVerticalFirst]
: StyleDict[index == count - 1
? ResourceToken.RadioGroupItemVerticalLast
: ResourceToken.RadioGroupItemDefault);
: ResourceToken.RadioGroupItemDefault];
}
case Button _:
case Button:
{
if (count == 1)
{
return ResourceHelper.GetResourceInternal<Style>(ResourceToken.ButtonGroupItemSingle);
return StyleDict[ResourceToken.ButtonGroupItemSingle];
}
var index = buttonGroup.Items.IndexOf(buttonBase);
return buttonGroup.Orientation == Orientation.Horizontal
? index == 0
? ResourceHelper.GetResourceInternal<Style>(ResourceToken.ButtonGroupItemHorizontalFirst)
: ResourceHelper.GetResourceInternal<Style>(index == count - 1
? StyleDict[ResourceToken.ButtonGroupItemHorizontalFirst]
: StyleDict[index == count - 1
? ResourceToken.ButtonGroupItemHorizontalLast
: ResourceToken.ButtonGroupItemDefault)
: ResourceToken.ButtonGroupItemDefault]
: index == 0
? ResourceHelper.GetResourceInternal<Style>(ResourceToken.ButtonGroupItemVerticalFirst)
: ResourceHelper.GetResourceInternal<Style>(index == count - 1
? StyleDict[ResourceToken.ButtonGroupItemVerticalFirst]
: StyleDict[index == count - 1
? ResourceToken.ButtonGroupItemVerticalLast
: ResourceToken.ButtonGroupItemDefault);
: ResourceToken.ButtonGroupItemDefault];
}
case ToggleButton _:
case ToggleButton:
{
if (count == 1)
{
return ResourceHelper.GetResourceInternal<Style>(ResourceToken.ToggleButtonGroupItemSingle);
return StyleDict[ResourceToken.ToggleButtonGroupItemSingle];
}
var index = buttonGroup.Items.IndexOf(buttonBase);
return buttonGroup.Orientation == Orientation.Horizontal
? index == 0
? ResourceHelper.GetResourceInternal<Style>(ResourceToken.ToggleButtonGroupItemHorizontalFirst)
: ResourceHelper.GetResourceInternal<Style>(index == count - 1
? StyleDict[ResourceToken.ToggleButtonGroupItemHorizontalFirst]
: StyleDict[index == count - 1
? ResourceToken.ToggleButtonGroupItemHorizontalLast
: ResourceToken.ToggleButtonGroupItemDefault)
: ResourceToken.ToggleButtonGroupItemDefault]
: index == 0
? ResourceHelper.GetResourceInternal<Style>(ResourceToken.ToggleButtonGroupItemVerticalFirst)
: ResourceHelper.GetResourceInternal<Style>(index == count - 1
? StyleDict[ResourceToken.ToggleButtonGroupItemVerticalFirst]
: StyleDict[index == count - 1
? ResourceToken.ToggleButtonGroupItemVerticalLast
: ResourceToken.ToggleButtonGroupItemDefault);
: ResourceToken.ToggleButtonGroupItemDefault];
}
}
}