This commit is contained in:
Lightczx
2023-11-06 11:17:16 +08:00
parent c0980fabe8
commit 2a4c93d241
9 changed files with 62 additions and 16 deletions

View File

@@ -3,6 +3,7 @@
using CommunityToolkit.WinUI.Controls;
using Microsoft.UI.Xaml;
using Snap.Hutao.Core.Setting;
namespace Snap.Hutao.Control.Panel;
@@ -11,6 +12,8 @@ namespace Snap.Hutao.Control.Panel;
/// </summary>
[HighQuality]
[DependencyProperty("Current", typeof(string), List)]
[DependencyProperty("LocalSettingKeySuffixForCurrent", typeof(string))]
[DependencyProperty("LocalSettingKeyExtraForCurrent", typeof(string), "")]
internal sealed partial class PanelSelector : Segmented
{
public const string List = nameof(List);
@@ -42,21 +45,41 @@ internal sealed partial class PanelSelector : Segmented
selectedIndexChangedCallbackToken = RegisterPropertyChangedCallback(SelectedIndexProperty, OnSelectedIndexChanged);
}
private void OnSelectedIndexChanged(DependencyObject sender, DependencyProperty dp)
{
Current = IndexTypeMap[(int)GetValue(dp)];
}
private void OnRootLoaded(object sender, RoutedEventArgs e)
private static void OnSelectedIndexChanged(DependencyObject sender, DependencyProperty dp)
{
PanelSelector selector = (PanelSelector)sender;
selector.SelectedItem = selector.Items.Cast<SegmentedItem>().Single(item => (string)item.Tag == Current);
selector.Current = IndexTypeMap[(int)selector.GetValue(dp)];
if (!string.IsNullOrEmpty(selector.LocalSettingKeySuffixForCurrent))
{
LocalSetting.Set(GetSettingKey(selector), selector.Current);
}
}
private void OnRootUnload(object sender, RoutedEventArgs e)
private static void OnRootLoaded(object sender, RoutedEventArgs e)
{
UnregisterPropertyChangedCallback(SelectedIndexProperty, selectedIndexChangedCallbackToken);
Loaded -= loadedEventHandler;
Unloaded -= unloadedEventHandler;
PanelSelector selector = (PanelSelector)sender;
if (string.IsNullOrEmpty(selector.LocalSettingKeySuffixForCurrent))
{
return;
}
string value = LocalSetting.Get(GetSettingKey(selector), selector.Current);
selector.Current = value;
selector.SelectedItem = selector.Items.Cast<SegmentedItem>().Single(item => (string)item.Tag == selector.Current);
}
private static void OnRootUnload(object sender, RoutedEventArgs e)
{
PanelSelector selector = (PanelSelector)sender;
selector.UnregisterPropertyChangedCallback(SelectedIndexProperty, selector.selectedIndexChangedCallbackToken);
selector.Unloaded -= selector.unloadedEventHandler;
}
private static string GetSettingKey(PanelSelector selector)
{
return $"Control.PanelSelector.{selector.LocalSettingKeySuffixForCurrent}{selector.LocalSettingKeyExtraForCurrent}";
}
}

View File

@@ -120,6 +120,7 @@ internal sealed class TypedWishSummaryBuilder
{
// base
Name = context.Name,
TypeName = $"{context.DistributionType:D}",
From = fromTimeTracker,
To = toTimeTracker,
TotalCount = totalCountTracker,

View File

@@ -151,6 +151,8 @@
x:Name="ItemsPanelSelector"
Margin="6,0,0,0"
Current="Grid"
LocalSettingKeyExtraForCurrent="{Binding TypeName}"
LocalSettingKeySuffixForCurrent="StatisticsCard.OrangeList"
Visibility="{x:Bind DetailExpander.IsExpanded, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}"/>
</StackPanel>
</Grid>

View File

@@ -202,7 +202,10 @@
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal">
<shcp:PanelSelector x:Name="ItemsPanelSelector" Margin="8,0,0,0"/>
<shcp:PanelSelector
x:Name="ItemsPanelSelector"
Margin="8,0,0,0"
LocalSettingKeySuffixForCurrent="AchievementPage.AchievementGoals"/>
<Viewbox
Height="32"
MaxWidth="192"

View File

@@ -512,7 +512,10 @@
DefaultLabelPosition="Right">
<CommandBar.Content>
<StackPanel Orientation="Horizontal">
<shcp:PanelSelector x:Name="ItemsPanelSelector" Margin="6,8,0,0"/>
<shcp:PanelSelector
x:Name="ItemsPanelSelector"
Margin="6,8,0,0"
LocalSettingKeySuffixForCurrent="AvatarPropertyPage.Summary.Avatars"/>
<ToggleButton
x:Name="RefreshTimeToggle"
Margin="8,8,0,0"

View File

@@ -199,7 +199,10 @@
BorderThickness="0"
DefaultLabelPosition="Right">
<CommandBar.Content>
<shcp:PanelSelector x:Name="ItemsPanelSelector" Margin="8,8,0,0"/>
<shcp:PanelSelector
x:Name="ItemsPanelSelector"
Margin="8,8,0,0"
LocalSettingKeySuffixForCurrent="WikiAvatarPage.Avatars"/>
</CommandBar.Content>
<!--<AppBarButton Icon="{shcm:FontIcon Glyph=&#xE946;}" Label="搜索提示"/>-->
<AppBarElementContainer>

View File

@@ -76,7 +76,10 @@
BorderThickness="0"
DefaultLabelPosition="Right">
<CommandBar.Content>
<shcp:PanelSelector x:Name="ItemsPanelSelector" Margin="6,8,0,0"/>
<shcp:PanelSelector
x:Name="ItemsPanelSelector"
Margin="6,8,0,0"
LocalSettingKeySuffixForCurrent="WikiMonsterPage.Monsters"/>
</CommandBar.Content>
<AppBarElementContainer Visibility="Collapsed">
<AutoSuggestBox

View File

@@ -97,7 +97,10 @@
BorderThickness="0"
DefaultLabelPosition="Right">
<CommandBar.Content>
<shcp:PanelSelector x:Name="ItemsPanelSelector" Margin="6,8,0,0"/>
<shcp:PanelSelector
x:Name="ItemsPanelSelector"
Margin="6,8,0,0"
LocalSettingKeySuffixForCurrent="WikiWeaponPage.Weapons"/>
</CommandBar.Content>
<AppBarElementContainer>
<AutoSuggestBox

View File

@@ -14,6 +14,11 @@ internal abstract class Wish
/// </summary>
public string Name { get; set; } = default!;
/// <summary>
/// 类型名称,不受语言影响
/// </summary>
public string? TypeName { get; set; }
/// <summary>
/// 总数
/// </summary>