fix measure

This commit is contained in:
qhy040404
2024-03-10 21:30:15 +08:00
parent 2a5e7e0136
commit 47f29de9c6
2 changed files with 27 additions and 18 deletions

View File

@@ -2,8 +2,6 @@
// Licensed under the MIT license.
using Microsoft.UI.Xaml;
using System.Data;
using System.Runtime.InteropServices;
using Windows.Foundation;
namespace Snap.Hutao.Control.Panel;
@@ -12,13 +10,24 @@ namespace Snap.Hutao.Control.Panel;
[DependencyProperty("Spacing", typeof(double))]
internal partial class HorizontalEqualPanel : Microsoft.UI.Xaml.Controls.Panel
{
public HorizontalEqualPanel()
{
Loaded += OnLoaded;
SizeChanged += OnSizeChanged;
}
protected override Size MeasureOverride(Size availableSize)
{
foreach (UIElement child in Children)
{
double childAvailableWidth = (availableSize.Width + Spacing) / Children.Count;
double childMinAvailableWidth = Math.Min(MinItemWidth, childAvailableWidth);
child.Measure(new(childMinAvailableWidth, availableSize.Height));
// 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 childMaxAvailableWidth = Math.Max(MinItemWidth, childAvailableWidth);
child.Measure(new(childMaxAvailableWidth, availableSize.Height));
}
return base.MeasureOverride(availableSize);
@@ -47,10 +56,18 @@ internal partial class HorizontalEqualPanel : Microsoft.UI.Xaml.Controls.Panel
{
child.Arrange(new Rect(x, 0, actualItemWidth, finalSize.Height));
x += actualItemWidth + Spacing;
//child.Measure(new Size(actualItemWidth, finalSize.Height));
}
return finalSize;
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
MinWidth = (MinItemWidth * Children.Count) + (Spacing * (Children.Count - 1));
}
private void OnSizeChanged(object sender, SizeChangedEventArgs e)
{
InvalidateMeasure();
}
}

View File

@@ -291,22 +291,14 @@
HorizontalScrollBarVisibility="Auto"
HorizontalScrollMode="Enabled"
VerticalScrollMode="Disabled">
<shcp:HorizontalEqualPanel MinItemWidth="300">
<shcp:HorizontalEqualPanel MinItemWidth="320">
<shvc:StatisticsCard Margin="16,16,0,16" DataContext="{Binding Statistics.AvatarWish}"/>
<shvc:StatisticsCard Margin="16,16,0,16" DataContext="{Binding Statistics.WeaponWish}"/>
<shvc:StatisticsCard
Grid.Column="0"
Margin="16,16,0,16"
DataContext="{Binding Statistics.AvatarWish}"/>
<shvc:StatisticsCard
Grid.Column="1"
Margin="16,16,0,16"
DataContext="{Binding Statistics.WeaponWish}"/>
<shvc:StatisticsCard
Grid.Column="2"
Margin="16,16,0,16"
DataContext="{Binding Statistics.StandardWish}"
ShowUpPull="False"/>
<shvc:StatisticsCard
Grid.Column="3"
Margin="16,16,0,16"
DataContext="{Binding Statistics.ChronicledWish}"
ShowUpPull="False"/>