diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Panel/HorizontalEqualPanel.cs b/src/Snap.Hutao/Snap.Hutao/Control/Panel/HorizontalEqualPanel.cs index 1a9a893d..4a1ac080 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Panel/HorizontalEqualPanel.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Panel/HorizontalEqualPanel.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using Microsoft.UI.Xaml; +using System.Runtime.InteropServices; using Windows.Foundation; namespace Snap.Hutao.Control.Panel; @@ -18,13 +19,14 @@ internal partial class HorizontalEqualPanel : Microsoft.UI.Xaml.Controls.Panel protected override Size MeasureOverride(Size availableSize) { - foreach (UIElement child in Children) + List visibleChildren = Children.Where(child => child.Visibility is Visibility.Visible).ToList(); + foreach (ref readonly UIElement visibleChild in CollectionsMarshal.AsSpan(visibleChildren)) { // ScrollViewer will always return an Infinity Size, we should use ActualWidth for this situation. double availableWidth = double.IsInfinity(availableSize.Width) ? ActualWidth : availableSize.Width; - double childAvailableWidth = (availableWidth + Spacing) / Children.Count; + double childAvailableWidth = (availableWidth + Spacing) / visibleChildren.Count; double childMaxAvailableWidth = Math.Max(MinItemWidth, childAvailableWidth); - child.Measure(new(childMaxAvailableWidth - Spacing, ActualHeight)); + visibleChild.Measure(new(childMaxAvailableWidth - Spacing, ActualHeight)); } return base.MeasureOverride(availableSize); @@ -32,14 +34,14 @@ internal partial class HorizontalEqualPanel : Microsoft.UI.Xaml.Controls.Panel protected override Size ArrangeOverride(Size finalSize) { - int itemCount = Children.Count; - double availableItemWidth = (finalSize.Width - (Spacing * (itemCount - 1))) / itemCount; + List visibleChildren = Children.Where(child => child.Visibility is Visibility.Visible).ToList(); + double availableItemWidth = (finalSize.Width - (Spacing * (visibleChildren.Count - 1))) / visibleChildren.Count; double actualItemWidth = Math.Max(MinItemWidth, availableItemWidth); double offset = 0; - foreach (UIElement child in Children) + foreach (ref readonly UIElement visibleChild in CollectionsMarshal.AsSpan(visibleChildren)) { - child.Arrange(new Rect(offset, 0, actualItemWidth, finalSize.Height)); + visibleChild.Arrange(new Rect(offset, 0, actualItemWidth, finalSize.Height)); offset += actualItemWidth + Spacing; } @@ -49,7 +51,8 @@ internal partial class HorizontalEqualPanel : Microsoft.UI.Xaml.Controls.Panel private static void OnLoaded(object sender, RoutedEventArgs e) { HorizontalEqualPanel panel = (HorizontalEqualPanel)sender; - panel.MinWidth = (panel.MinItemWidth * panel.Children.Count) + (panel.Spacing * (panel.Children.Count - 1)); + int vivibleChildrenCount = panel.Children.Count(child => child.Visibility is Visibility.Visible); + panel.MinWidth = (panel.MinItemWidth * vivibleChildrenCount) + (panel.Spacing * (vivibleChildrenCount - 1)); } private static void OnSizeChanged(object sender, SizeChangedEventArgs e) diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/HutaoStatisticsFactory.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/HutaoStatisticsFactory.cs index f7c0ddaa..397f65ee 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/HutaoStatisticsFactory.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/Factory/HutaoStatisticsFactory.cs @@ -19,7 +19,7 @@ internal sealed class HutaoStatisticsFactory private readonly GachaEvent avatarEvent; private readonly GachaEvent avatarEvent2; private readonly GachaEvent weaponEvent; - private readonly GachaEvent chronicledEvent; + private readonly GachaEvent? chronicledEvent; public HutaoStatisticsFactory(in HutaoStatisticsFactoryMetadataContext context) { @@ -32,7 +32,7 @@ internal sealed class HutaoStatisticsFactory avatarEvent = context.GachaEvents.Single(g => g.From < now && g.To > now && g.Type == GachaType.ActivityAvatar); avatarEvent2 = context.GachaEvents.Single(g => g.From < now && g.To > now && g.Type == GachaType.SpecialActivityAvatar); weaponEvent = context.GachaEvents.Single(g => g.From < now && g.To > now && g.Type == GachaType.ActivityWeapon); - chronicledEvent = context.GachaEvents.Single(g => g.From < now && g.To > now && g.Type == GachaType.ActivityCity); + chronicledEvent = context.GachaEvents.SingleOrDefault(g => g.From < now && g.To > now && g.Type == GachaType.ActivityCity); } public HutaoStatistics Create(GachaEventStatistics raw) @@ -42,7 +42,7 @@ internal sealed class HutaoStatisticsFactory AvatarEvent = CreateWishSummary(avatarEvent, raw.AvatarEvent), AvatarEvent2 = CreateWishSummary(avatarEvent2, raw.AvatarEvent2), WeaponEvent = CreateWishSummary(weaponEvent, raw.WeaponEvent), - Chronicled = CreateWishSummary(chronicledEvent, raw.Chronicled), + Chronicled = chronicledEvent is null ? null : CreateWishSummary(chronicledEvent, raw.Chronicled), }; } diff --git a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj index 7f427d0c..32071b4a 100644 --- a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj +++ b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj @@ -35,11 +35,11 @@ Debug;Release true true @@ -52,7 +52,7 @@ - + @@ -205,7 +205,7 @@ - + @@ -220,7 +220,7 @@ - + @@ -389,37 +389,37 @@ MSBuild:Compile - + MSBuild:Compile - + MSBuild:Compile - + MSBuild:Compile - + MSBuild:Compile - + MSBuild:Compile - + MSBuild:Compile @@ -569,13 +569,13 @@ MSBuild:Compile - + MSBuild:Compile - + MSBuild:Compile @@ -617,7 +617,7 @@ MSBuild:Compile - + diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/GachaLogPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/GachaLogPage.xaml index 84c93d6c..46245bd0 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/GachaLogPage.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/GachaLogPage.xaml @@ -468,24 +468,18 @@ Margin="16" CornerRadius="{ThemeResource ControlCornerRadius}" IsLoading="{Binding HutaoCloudStatisticsViewModel.IsInitialized, Converter={StaticResource BoolNegationConverter}}"/> - - - - - - - - - - - - + + + + + diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLog/HutaoStatistics.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLog/HutaoStatistics.cs index 1602ff3f..5824c5a8 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLog/HutaoStatistics.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLog/HutaoStatistics.cs @@ -26,5 +26,5 @@ internal sealed class HutaoStatistics /// /// 集录祈愿 /// - public HutaoWishSummary Chronicled { get; set; } = default!; + public HutaoWishSummary? Chronicled { get; set; } } \ No newline at end of file