mirror of
https://jihulab.com/DGP-Studio/Snap.Hutao.git
synced 2025-11-19 21:02:53 +08:00
refactor GachaLog statistics
This commit is contained in:
@@ -18,11 +18,17 @@ internal partial class HorizontalEqualPanel : Microsoft.UI.Xaml.Controls.Panel
|
|||||||
|
|
||||||
protected override Size MeasureOverride(Size availableSize)
|
protected override Size MeasureOverride(Size availableSize)
|
||||||
{
|
{
|
||||||
|
int itemCount = Children.Count(child => child.Visibility is Visibility.Visible);
|
||||||
foreach (UIElement child in Children)
|
foreach (UIElement child in Children)
|
||||||
{
|
{
|
||||||
|
if (child.Visibility is Visibility.Collapsed)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// ScrollViewer will always return an Infinity Size, we should use ActualWidth for this situation.
|
// ScrollViewer will always return an Infinity Size, we should use ActualWidth for this situation.
|
||||||
double availableWidth = double.IsInfinity(availableSize.Width) ? ActualWidth : availableSize.Width;
|
double availableWidth = double.IsInfinity(availableSize.Width) ? ActualWidth : availableSize.Width;
|
||||||
double childAvailableWidth = (availableWidth + Spacing) / Children.Count;
|
double childAvailableWidth = (availableWidth + Spacing) / itemCount;
|
||||||
double childMaxAvailableWidth = Math.Max(MinItemWidth, childAvailableWidth);
|
double childMaxAvailableWidth = Math.Max(MinItemWidth, childAvailableWidth);
|
||||||
child.Measure(new(childMaxAvailableWidth - Spacing, ActualHeight));
|
child.Measure(new(childMaxAvailableWidth - Spacing, ActualHeight));
|
||||||
}
|
}
|
||||||
@@ -32,13 +38,18 @@ internal partial class HorizontalEqualPanel : Microsoft.UI.Xaml.Controls.Panel
|
|||||||
|
|
||||||
protected override Size ArrangeOverride(Size finalSize)
|
protected override Size ArrangeOverride(Size finalSize)
|
||||||
{
|
{
|
||||||
int itemCount = Children.Count;
|
int itemCount = Children.Count(child => child.Visibility is Visibility.Visible);
|
||||||
double availableItemWidth = (finalSize.Width - (Spacing * (itemCount - 1))) / itemCount;
|
double availableItemWidth = (finalSize.Width - (Spacing * (itemCount - 1))) / itemCount;
|
||||||
double actualItemWidth = Math.Max(MinItemWidth, availableItemWidth);
|
double actualItemWidth = Math.Max(MinItemWidth, availableItemWidth);
|
||||||
|
|
||||||
double offset = 0;
|
double offset = 0;
|
||||||
foreach (UIElement child in Children)
|
foreach (UIElement child in Children)
|
||||||
{
|
{
|
||||||
|
if (child.Visibility is Visibility.Collapsed)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
child.Arrange(new Rect(offset, 0, actualItemWidth, finalSize.Height));
|
child.Arrange(new Rect(offset, 0, actualItemWidth, finalSize.Height));
|
||||||
offset += actualItemWidth + Spacing;
|
offset += actualItemWidth + Spacing;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,7 +153,6 @@
|
|||||||
<None Remove="View\Control\DescParamComboBox.xaml" />
|
<None Remove="View\Control\DescParamComboBox.xaml" />
|
||||||
<None Remove="View\Control\Elevation.xaml" />
|
<None Remove="View\Control\Elevation.xaml" />
|
||||||
<None Remove="View\Control\HutaoStatisticsCard.xaml" />
|
<None Remove="View\Control\HutaoStatisticsCard.xaml" />
|
||||||
<None Remove="View\Control\HutaoStatisticsPanel.xaml" />
|
|
||||||
<None Remove="View\Control\ItemIcon.xaml" />
|
<None Remove="View\Control\ItemIcon.xaml" />
|
||||||
<None Remove="View\Control\LaunchGameResourceExpander.xaml" />
|
<None Remove="View\Control\LaunchGameResourceExpander.xaml" />
|
||||||
<None Remove="View\Control\LoadingView.xaml" />
|
<None Remove="View\Control\LoadingView.xaml" />
|
||||||
@@ -350,11 +349,6 @@
|
|||||||
<ItemGroup Condition="'$(DisableMsixProjectCapabilityAddedByProject)'!='true' and '$(EnablePreviewMsixTooling)'=='true'">
|
<ItemGroup Condition="'$(DisableMsixProjectCapabilityAddedByProject)'!='true' and '$(EnablePreviewMsixTooling)'=='true'">
|
||||||
<ProjectCapability Include="Msix" />
|
<ProjectCapability Include="Msix" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<Page Update="View\Control\HutaoStatisticsPanel.xaml">
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
</Page>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Page Update="View\Dialog\LaunchGameConfigurationFixDialog.xaml">
|
<Page Update="View\Dialog\LaunchGameConfigurationFixDialog.xaml">
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
<shcp:HorizontalEqualPanel
|
|
||||||
x:Class="Snap.Hutao.View.Control.HutaoStatisticsPanel"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
xmlns:shcp="using:Snap.Hutao.Control.Panel"
|
|
||||||
xmlns:shvc="using:Snap.Hutao.View.Control"
|
|
||||||
mc:Ignorable="d">
|
|
||||||
<shvc:HutaoStatisticsCard DataContext="{x:Bind Statistics.AvatarEvent}"/>
|
|
||||||
<shvc:HutaoStatisticsCard DataContext="{x:Bind Statistics.AvatarEvent2}"/>
|
|
||||||
<shvc:HutaoStatisticsCard DataContext="{x:Bind Statistics.WeaponEvent}"/>
|
|
||||||
</shcp:HorizontalEqualPanel>
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
// Copyright (c) DGP Studio. All rights reserved.
|
|
||||||
// Licensed under the MIT license.
|
|
||||||
|
|
||||||
using Microsoft.UI.Xaml;
|
|
||||||
using Snap.Hutao.Control.Panel;
|
|
||||||
using Snap.Hutao.ViewModel.GachaLog;
|
|
||||||
|
|
||||||
namespace Snap.Hutao.View.Control;
|
|
||||||
|
|
||||||
[DependencyProperty("Statistics", typeof(HutaoStatistics), default, nameof(OnStatisticsChanged))]
|
|
||||||
internal sealed partial class HutaoStatisticsPanel : HorizontalEqualPanel
|
|
||||||
{
|
|
||||||
public HutaoStatisticsPanel()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
|
|
||||||
if (DataContext is HutaoStatistics statistics && statistics.Chronicled is { } chronicled)
|
|
||||||
{
|
|
||||||
Children.Add(new HutaoStatisticsCard
|
|
||||||
{
|
|
||||||
DataContext = chronicled,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void OnStatisticsChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
|
|
||||||
{
|
|
||||||
HutaoStatisticsPanel panel = (HutaoStatisticsPanel)obj;
|
|
||||||
|
|
||||||
if (args.NewValue is HutaoStatistics { Chronicled: { } chronicled })
|
|
||||||
{
|
|
||||||
panel.Children.Add(new HutaoStatisticsCard
|
|
||||||
{
|
|
||||||
DataContext = chronicled,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -468,15 +468,18 @@
|
|||||||
Margin="16"
|
Margin="16"
|
||||||
CornerRadius="{ThemeResource ControlCornerRadius}"
|
CornerRadius="{ThemeResource ControlCornerRadius}"
|
||||||
IsLoading="{Binding HutaoCloudStatisticsViewModel.IsInitialized, Converter={StaticResource BoolNegationConverter}}"/>
|
IsLoading="{Binding HutaoCloudStatisticsViewModel.IsInitialized, Converter={StaticResource BoolNegationConverter}}"/>
|
||||||
<shvc:HutaoStatisticsPanel
|
<shcp:HorizontalEqualPanel
|
||||||
Margin="16"
|
Margin="16"
|
||||||
Spacing="16"
|
Spacing="16"
|
||||||
Statistics="{Binding HutaoCloudStatisticsViewModel.Statistics}"
|
|
||||||
Visibility="{Binding HutaoCloudStatisticsViewModel.IsInitialized, Converter={StaticResource BoolToVisibilityConverter}}">
|
Visibility="{Binding HutaoCloudStatisticsViewModel.IsInitialized, Converter={StaticResource BoolToVisibilityConverter}}">
|
||||||
<mxi:Interaction.Behaviors>
|
<mxi:Interaction.Behaviors>
|
||||||
<shcb:InvokeCommandOnLoadedBehavior Command="{Binding HutaoCloudStatisticsViewModel.OpenUICommand}"/>
|
<shcb:InvokeCommandOnLoadedBehavior Command="{Binding HutaoCloudStatisticsViewModel.OpenUICommand}"/>
|
||||||
</mxi:Interaction.Behaviors>
|
</mxi:Interaction.Behaviors>
|
||||||
</shvc:HutaoStatisticsPanel>
|
<shvc:HutaoStatisticsCard DataContext="{Binding HutaoCloudStatisticsViewModel.Statistics.AvatarEvent}"/>
|
||||||
|
<shvc:HutaoStatisticsCard DataContext="{Binding HutaoCloudStatisticsViewModel.Statistics.AvatarEvent2}"/>
|
||||||
|
<shvc:HutaoStatisticsCard DataContext="{Binding HutaoCloudStatisticsViewModel.Statistics.WeaponEvent}"/>
|
||||||
|
<shvc:HutaoStatisticsCard DataContext="{Binding HutaoCloudStatisticsViewModel.Statistics.Chronicled}" Visibility="{Binding Converter={StaticResource EmptyObjectToVisibilityConverter}, FallbackValue=Collapsed}"/>
|
||||||
|
</shcp:HorizontalEqualPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
</PivotItem>
|
</PivotItem>
|
||||||
</Pivot>
|
</Pivot>
|
||||||
|
|||||||
Reference in New Issue
Block a user