refine UI

This commit is contained in:
Lightczx
2023-06-07 22:21:55 +08:00
parent 90b396703a
commit e663c2f353
20 changed files with 1363 additions and 1274 deletions

View File

@@ -44,8 +44,9 @@
<CornerRadius x:Key="CompatCornerRadiusSmall">2</CornerRadius> <CornerRadius x:Key="CompatCornerRadiusSmall">2</CornerRadius>
<!-- OpenPaneLength --> <!-- OpenPaneLength -->
<x:Double x:Key="CompatSplitViewOpenPaneLength">212</x:Double> <x:Double x:Key="CompatSplitViewOpenPaneLength">212</x:Double>
<x:Double x:Key="CompatSplitViewOpenPaneLength2">284</x:Double>
<GridLength x:Key="CompatGridLength2">268</GridLength> <x:Double x:Key="CompatSplitViewOpenPaneLength2">304</x:Double>
<GridLength x:Key="CompatGridLength2">288</GridLength>
<x:Double x:Key="HomeAdaptiveCardHeight">180</x:Double> <x:Double x:Key="HomeAdaptiveCardHeight">180</x:Double>

View File

@@ -0,0 +1,60 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Data;
namespace Snap.Hutao.Control;
/// <summary>
/// 依赖对象转换器
/// </summary>
/// <typeparam name="TFrom">源类型</typeparam>
/// <typeparam name="TTo">目标类型</typeparam>
internal abstract class DependencyValueConverter<TFrom, TTo> : DependencyObject, IValueConverter
{
/// <inheritdoc/>
public object? Convert(object value, Type targetType, object parameter, string language)
{
#if DEBUG
try
{
return Convert((TFrom)value);
}
catch (Exception ex)
{
Ioc.Default
.GetRequiredService<ILogger<ValueConverter<TFrom, TTo>>>()
.LogError(ex, "值转换器异常");
}
return null;
#else
return Convert((TFrom)value);
#endif
}
/// <inheritdoc/>
public object? ConvertBack(object value, Type targetType, object parameter, string language)
{
return ConvertBack((TTo)value);
}
/// <summary>
/// 从源类型转换到目标类型
/// </summary>
/// <param name="from">源</param>
/// <returns>目标</returns>
public abstract TTo Convert(TFrom from);
/// <summary>
/// 从目标类型转换到源类型
/// 重写时请勿调用基类方法
/// </summary>
/// <param name="to">目标</param>
/// <returns>源</returns>
public virtual TFrom ConvertBack(TTo to)
{
throw Must.NeverHappen();
}
}

View File

@@ -8,10 +8,10 @@ using Windows.UI;
namespace Snap.Hutao.Control.Media; namespace Snap.Hutao.Control.Media;
/// <summary> /// <summary>
/// BGRA8 结构 /// BGRA 结构
/// </summary> /// </summary>
[HighQuality] [HighQuality]
internal struct Bgra8 internal struct Bgra32
{ {
/// <summary> /// <summary>
/// B /// B
@@ -38,9 +38,9 @@ internal struct Bgra8
/// </summary> /// </summary>
/// <param name="color">颜色</param> /// <param name="color">颜色</param>
/// <returns>新的 BGRA8 结构</returns> /// <returns>新的 BGRA8 结构</returns>
public static unsafe Bgra8 FromColor(Color color) public static unsafe Bgra32 FromColor(Color color)
{ {
Unsafe.SkipInit(out Bgra8 bgra8); Unsafe.SkipInit(out Bgra32 bgra8);
*(uint*)&bgra8 = BinaryPrimitives.ReverseEndianness(*(uint*)&color); *(uint*)&bgra8 = BinaryPrimitives.ReverseEndianness(*(uint*)&color);
return bgra8; return bgra8;
} }

View File

@@ -4,6 +4,7 @@
// https://github.com/xunkong/desktop/tree/main/src/Desktop/Desktop/Pages/CharacterInfoPage.xaml.cs // https://github.com/xunkong/desktop/tree/main/src/Desktop/Desktop/Pages/CharacterInfoPage.xaml.cs
using CommunityToolkit.WinUI; using CommunityToolkit.WinUI;
using System.Buffers.Binary;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using Windows.UI; using Windows.UI;
@@ -13,61 +14,71 @@ namespace Snap.Hutao.Control.Media;
/// RGBA 颜色 /// RGBA 颜色
/// </summary> /// </summary>
[HighQuality] [HighQuality]
[StructLayout(LayoutKind.Explicit)] internal struct Rgba32
internal struct Rgba8
{ {
/// <summary> /// <summary>
/// R /// R
/// </summary> /// </summary>
[FieldOffset(3)]
public byte R; public byte R;
/// <summary> /// <summary>
/// G /// G
/// </summary> /// </summary>
[FieldOffset(2)]
public byte G; public byte G;
/// <summary> /// <summary>
/// B /// B
/// </summary> /// </summary>
[FieldOffset(1)]
public byte B; public byte B;
/// <summary> /// <summary>
/// A /// A
/// </summary> /// </summary>
[FieldOffset(0)]
public byte A; public byte A;
[FieldOffset(0)]
private readonly uint data;
/// <summary> /// <summary>
/// 构造一个新的 RGBA8 颜色 /// 构造一个新的 RGBA8 颜色
/// </summary> /// </summary>
/// <param name="hex">色值字符串</param> /// <param name="hex">色值字符串</param>
public Rgba8(in ReadOnlySpan<char> hex) public unsafe Rgba32(string hex)
: this(Convert.ToUInt32(hex, 16))
{ {
R = 0;
G = 0;
B = 0;
A = 0;
data = Convert.ToUInt32(hex.ToString(), 16);
} }
private Rgba8(byte r, byte g, byte b, byte a) /// <summary>
/// 使用 RGBA 代码初始化新的结构
/// </summary>
/// <param name="code">RGBA 代码</param>
public unsafe Rgba32(uint code)
{
// RRGGBBAA -> AABBGGRR
fixed (Rgba32* pSelf = &this)
{
*(uint*)pSelf = BinaryPrimitives.ReverseEndianness(code);
}
}
private Rgba32(byte r, byte g, byte b, byte a)
{ {
data = 0;
R = r; R = r;
G = g; G = g;
B = b; B = b;
A = a; A = a;
} }
public static implicit operator Color(Rgba8 hexColor) public static unsafe implicit operator Color(Rgba32 hexColor)
{ {
return Color.FromArgb(hexColor.A, hexColor.R, hexColor.G, hexColor.B); // AABBGGRR -> BBGGRRAA
// AABBGGRR -> 000000AA
uint a = (*(uint*)&hexColor) >> 24;
// AABBGGRR -> BBGGRR00
uint rgb = (*(uint*)&hexColor) << 8;
// BBGGRR00 + 000000AA
uint rgba = rgb + a;
return *(Color*)&rgba;
} }
/// <summary> /// <summary>
@@ -75,7 +86,7 @@ internal struct Rgba8
/// </summary> /// </summary>
/// <param name="hsl">HSL 颜色</param> /// <param name="hsl">HSL 颜色</param>
/// <returns>RGBA8颜色</returns> /// <returns>RGBA8颜色</returns>
public static Rgba8 FromHsl(HslColor hsl) public static Rgba32 FromHsl(HslColor hsl)
{ {
double chroma = (1 - Math.Abs((2 * hsl.L) - 1)) * hsl.S; double chroma = (1 - Math.Abs((2 * hsl.L) - 1)) * hsl.S;
double h1 = hsl.H / 60; double h1 = hsl.H / 60;

View File

@@ -20,15 +20,15 @@ internal static class SoftwareBitmapExtension
/// </summary> /// </summary>
/// <param name="softwareBitmap">软件位图</param> /// <param name="softwareBitmap">软件位图</param>
/// <param name="tint">底色</param> /// <param name="tint">底色</param>
public static unsafe void NormalBlend(this SoftwareBitmap softwareBitmap, Bgra8 tint) public static unsafe void NormalBlend(this SoftwareBitmap softwareBitmap, Bgra32 tint)
{ {
using (BitmapBuffer buffer = softwareBitmap.LockBuffer(BitmapBufferAccessMode.ReadWrite)) using (BitmapBuffer buffer = softwareBitmap.LockBuffer(BitmapBufferAccessMode.ReadWrite))
{ {
using (IMemoryBufferReference reference = buffer.CreateReference()) using (IMemoryBufferReference reference = buffer.CreateReference())
{ {
reference.As<IMemoryBufferByteAccess>().GetBuffer(out byte* data, out uint length); reference.As<IMemoryBufferByteAccess>().GetBuffer(out byte* data, out uint length);
Span<Bgra8> bytes = new(data, unchecked((int)length / (sizeof(Bgra8) / sizeof(uint)))); Span<Bgra32> bytes = new(data, unchecked((int)length / sizeof(Bgra32)));
foreach (ref Bgra8 pixel in bytes) foreach (ref Bgra32 pixel in bytes)
{ {
byte baseAlpha = pixel.A; byte baseAlpha = pixel.A;
int opposite = 0xFF - baseAlpha; int opposite = 0xFF - baseAlpha;

View File

@@ -2,6 +2,7 @@
// Licensed under the MIT license. // Licensed under the MIT license.
using CommunityToolkit.WinUI; using CommunityToolkit.WinUI;
using CommunityToolkit.WinUI.Helpers;
using Microsoft.UI.Xaml; using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Documents; using Microsoft.UI.Xaml.Documents;
@@ -57,10 +58,10 @@ internal sealed class DescriptionTextBlock : ContentControl
TextBlock text = (TextBlock)((DescriptionTextBlock)d).Content; TextBlock text = (TextBlock)((DescriptionTextBlock)d).Content;
ReadOnlySpan<char> description = (string)e.NewValue; ReadOnlySpan<char> description = (string)e.NewValue;
ApplyDescription(text, description); UpdateDescription(text, description);
} }
private static void ApplyDescription(TextBlock text, in ReadOnlySpan<char> description) private static void UpdateDescription(TextBlock text, in ReadOnlySpan<char> description)
{ {
text.Inlines.Clear(); text.Inlines.Clear();
@@ -68,7 +69,7 @@ internal sealed class DescriptionTextBlock : ContentControl
for (int i = 0; i < description.Length;) for (int i = 0; i < description.Length;)
{ {
// newline // newline
if (description[i] == '\\' && description[i + 1] == 'n') if (description.Slice(i, 2).SequenceEqual(@"\n"))
{ {
AppendText(text, description[last..i]); AppendText(text, description[last..i]);
AppendLineBreak(text); AppendLineBreak(text);
@@ -77,10 +78,10 @@ internal sealed class DescriptionTextBlock : ContentControl
} }
// color tag // color tag
else if (description[i] == '<' && description[i + 1] == 'c') else if (description.Slice(i, 2).SequenceEqual("<c"))
{ {
AppendText(text, description[last..i]); AppendText(text, description[last..i]);
Rgba8 color = new(description.Slice(i + 8, 8)); Rgba32 color = new(description.Slice(i + 8, 8).ToString());
int length = description[(i + ColorTagLeftLength)..].IndexOf('<'); int length = description[(i + ColorTagLeftLength)..].IndexOf('<');
AppendColorText(text, description.Slice(i + ColorTagLeftLength, length), color); AppendColorText(text, description.Slice(i + ColorTagLeftLength, length), color);
@@ -89,7 +90,7 @@ internal sealed class DescriptionTextBlock : ContentControl
} }
// italic // italic
else if (description[i] == '<' && description[i + 1] == 'i') else if (description.Slice(i, 2).SequenceEqual("<i"))
{ {
AppendText(text, description[last..i]); AppendText(text, description[last..i]);
@@ -116,7 +117,7 @@ internal sealed class DescriptionTextBlock : ContentControl
text.Inlines.Add(new Run { Text = slice.ToString() }); text.Inlines.Add(new Run { Text = slice.ToString() });
} }
private static void AppendColorText(TextBlock text, in ReadOnlySpan<char> slice, Rgba8 color) private static void AppendColorText(TextBlock text, in ReadOnlySpan<char> slice, Rgba32 color)
{ {
Color targetColor; Color targetColor;
if (ThemeHelper.IsDarkMode(text.ActualTheme)) if (ThemeHelper.IsDarkMode(text.ActualTheme))
@@ -127,7 +128,7 @@ internal sealed class DescriptionTextBlock : ContentControl
{ {
HslColor hsl = color.ToHsl(); HslColor hsl = color.ToHsl();
hsl.L *= 0.3; hsl.L *= 0.3;
targetColor = Rgba8.FromHsl(hsl); targetColor = Rgba32.FromHsl(hsl);
} }
text.Inlines.Add(new Run text.Inlines.Add(new Run
@@ -154,6 +155,6 @@ internal sealed class DescriptionTextBlock : ContentControl
private void OnActualThemeChanged(FrameworkElement sender, object args) private void OnActualThemeChanged(FrameworkElement sender, object args)
{ {
// Simply re-apply texts // Simply re-apply texts
ApplyDescription((TextBlock)Content, Description); UpdateDescription((TextBlock)Content, Description);
} }
} }

View File

@@ -1,7 +1,6 @@
// Copyright (c) DGP Studio. All rights reserved. // Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license. // Licensed under the MIT license.
using Microsoft.UI.Composition.SystemBackdrops;
using Microsoft.UI.Xaml; using Microsoft.UI.Xaml;
namespace Snap.Hutao.Control.Theme; namespace Snap.Hutao.Control.Theme;
@@ -12,37 +11,6 @@ namespace Snap.Hutao.Control.Theme;
[HighQuality] [HighQuality]
internal static class ThemeHelper internal static class ThemeHelper
{ {
/// <summary>
/// 判断主题是否相等
/// </summary>
/// <param name="applicationTheme">应用主题</param>
/// <param name="elementTheme">元素主题</param>
/// <returns>主题是否相等</returns>
public static bool Equals(ApplicationTheme applicationTheme, ElementTheme elementTheme)
{
return (applicationTheme, elementTheme) switch
{
(ApplicationTheme.Light, ElementTheme.Light) => true,
(ApplicationTheme.Dark, ElementTheme.Dark) => true,
_ => false,
};
}
/// <summary>
/// 从 <see cref="ApplicationTheme"/> 转换到 <see cref="ElementTheme"/>
/// </summary>
/// <param name="applicationTheme">应用主题</param>
/// <returns>元素主题</returns>
public static ElementTheme ApplicationToElement(ApplicationTheme applicationTheme)
{
return applicationTheme switch
{
ApplicationTheme.Light => ElementTheme.Light,
ApplicationTheme.Dark => ElementTheme.Dark,
_ => throw Must.NeverHappen(),
};
}
/// <summary> /// <summary>
/// 从 <see cref="ElementTheme"/> 转换到 <see cref="ApplicationTheme"/> /// 从 <see cref="ElementTheme"/> 转换到 <see cref="ApplicationTheme"/>
/// </summary> /// </summary>
@@ -58,22 +26,6 @@ internal static class ThemeHelper
}; };
} }
/// <summary>
/// 从 <see cref="ElementTheme"/> 转换到 <see cref="SystemBackdropTheme"/>
/// </summary>
/// <param name="elementTheme">元素主题</param>
/// <returns>背景主题</returns>
public static SystemBackdropTheme ElementToSystemBackdrop(ElementTheme elementTheme)
{
return elementTheme switch
{
ElementTheme.Default => SystemBackdropTheme.Default,
ElementTheme.Light => SystemBackdropTheme.Light,
ElementTheme.Dark => SystemBackdropTheme.Dark,
_ => throw Must.NeverHappen(),
};
}
/// <summary> /// <summary>
/// 检查是否为暗黑模式 /// 检查是否为暗黑模式
/// </summary> /// </summary>

View File

@@ -4,7 +4,6 @@ RemoveWindowSubclass
SetWindowSubclass SetWindowSubclass
// DWMAPI // DWMAPI
DwmGetWindowAttribute
DwmSetWindowAttribute DwmSetWindowAttribute
// GDI32 // GDI32
@@ -14,14 +13,11 @@ GetDeviceCaps
CloseHandle CloseHandle
CreateEventW CreateEventW
CreateRemoteThread CreateRemoteThread
CreateToolhelp32Snapshot
GetModuleHandleW GetModuleHandleW
GetProcAddress GetProcAddress
K32EnumProcessModules K32EnumProcessModules
K32GetModuleBaseName K32GetModuleBaseNameW
K32GetModuleInformation K32GetModuleInformation
Module32First
Module32Next
ReadProcessMemory ReadProcessMemory
SetEvent SetEvent
VirtualAlloc VirtualAlloc

View File

@@ -93,8 +93,9 @@
TrueValue="{ThemeResource CardBackgroundFillColorDefaultBrush}"/> TrueValue="{ThemeResource CardBackgroundFillColorDefaultBrush}"/>
<DataTemplate x:Key="OrangeGridTemplate" d:DataType="shvg:SummaryItem"> <DataTemplate x:Key="OrangeGridTemplate" d:DataType="shvg:SummaryItem">
<Grid Width="40" Margin="0,4,4,0">
<Border <Border
Width="40"
Margin="0,4,4,0"
Background="{Binding IsUp, Converter={StaticResource BoolToBrushConverter}}" Background="{Binding IsUp, Converter={StaticResource BoolToBrushConverter}}"
Style="{StaticResource BorderCardStyle}" Style="{StaticResource BorderCardStyle}"
ToolTipService.ToolTip="{Binding TimeFormatted}"> ToolTipService.ToolTip="{Binding TimeFormatted}">
@@ -116,7 +117,6 @@
</TextBlock> </TextBlock>
</StackPanel> </StackPanel>
</Border> </Border>
</Grid>
</DataTemplate> </DataTemplate>
</UserControl.Resources> </UserControl.Resources>

View File

@@ -0,0 +1,45 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Microsoft.UI.Xaml;
using Snap.Hutao.Control;
namespace Snap.Hutao.View.Converter;
/// <summary>
/// 条件转换器
/// </summary>
internal sealed class PanelSelectorModeConverter : DependencyValueConverter<string, object>
{
private static readonly DependencyProperty ListValueProperty = Property<PanelSelectorModeConverter>.Depend<object>(nameof(ListValue));
private static readonly DependencyProperty GridValueProperty = Property<PanelSelectorModeConverter>.Depend<object>(nameof(GridValue));
/// <summary>
/// 列表值
/// </summary>
public object ListValue
{
get => GetValue(ListValueProperty);
set => SetValue(ListValueProperty, value);
}
/// <summary>
/// 网格值
/// </summary>
public object GridValue
{
get => GetValue(GridValueProperty);
set => SetValue(GridValueProperty, value);
}
/// <inheritdoc/>
public override object Convert(string from)
{
return from switch
{
"List" => ListValue,
"Grid" => GridValue,
_ => default!,
};
}
}

View File

@@ -2,6 +2,7 @@
x:Class="Snap.Hutao.View.Page.AchievementPage" x:Class="Snap.Hutao.View.Page.AchievementPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cwuc="using:CommunityToolkit.WinUI.UI.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mxi="using:Microsoft.Xaml.Interactivity" xmlns:mxi="using:Microsoft.Xaml.Interactivity"
@@ -10,6 +11,7 @@
xmlns:shcb="using:Snap.Hutao.Control.Behavior" xmlns:shcb="using:Snap.Hutao.Control.Behavior"
xmlns:shci="using:Snap.Hutao.Control.Image" xmlns:shci="using:Snap.Hutao.Control.Image"
xmlns:shcm="using:Snap.Hutao.Control.Markup" xmlns:shcm="using:Snap.Hutao.Control.Markup"
xmlns:shcp="using:Snap.Hutao.Control.Panel"
xmlns:shva="using:Snap.Hutao.ViewModel.Achievement" xmlns:shva="using:Snap.Hutao.ViewModel.Achievement"
d:DataContext="{d:DesignInstance shva:AchievementViewModel}" d:DataContext="{d:DesignInstance shva:AchievementViewModel}"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
@@ -35,11 +37,14 @@
<ColumnDefinition/> <ColumnDefinition/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal">
<shcp:PanelSelector x:Name="ItemsPanelSelector" Margin="8,0,0,0"/>
<TextBlock <TextBlock
Margin="16,0,0,2" Margin="16,0,0,2"
VerticalAlignment="Center" VerticalAlignment="Center"
Style="{StaticResource SubtitleTextBlockStyle}" Style="{StaticResource SubtitleTextBlockStyle}"
Text="{Binding FinishDescription}"/> Text="{Binding FinishDescription}"/>
</StackPanel>
<CommandBar <CommandBar
Grid.Column="1" Grid.Column="1"
@@ -113,7 +118,13 @@
Label="{shcm:ResourceString Name=ViewPageAchievementSortIncompletedItemsFirst}"/> Label="{shcm:ResourceString Name=ViewPageAchievementSortIncompletedItemsFirst}"/>
</CommandBar> </CommandBar>
</Grid> </Grid>
<cwuc:SwitchPresenter Grid.Row="1" Value="{Binding ElementName=ItemsPanelSelector, Path=Current}">
<cwuc:SwitchPresenter.ContentTransitions>
<TransitionCollection>
<ContentThemeTransition/>
</TransitionCollection>
</cwuc:SwitchPresenter.ContentTransitions>
<cwuc:Case Value="List">
<SplitView <SplitView
Grid.Row="1" Grid.Row="1"
DisplayMode="Inline" DisplayMode="Inline"
@@ -162,13 +173,15 @@
</SplitView.Pane> </SplitView.Pane>
<SplitView.Content> <SplitView.Content>
<ScrollViewer Padding="0,0,16,0"> <ScrollViewer Padding="0,0,8,0">
<ItemsControl <ItemsControl
Margin="8,0,0,16" Margin="8,0,0,16"
ItemsPanel="{StaticResource ItemsStackPanelTemplate}" ItemsPanel="{StaticResource ItemsStackPanelTemplate}"
ItemsSource="{Binding Achievements}"> ItemsSource="{Binding Achievements}">
<ItemsControl.ItemContainerTransitions> <ItemsControl.ItemContainerTransitions>
<TransitionCollection>
<ContentThemeTransition/> <ContentThemeTransition/>
</TransitionCollection>
</ItemsControl.ItemContainerTransitions> </ItemsControl.ItemContainerTransitions>
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate> <DataTemplate>
@@ -235,6 +248,54 @@
</ScrollViewer> </ScrollViewer>
</SplitView.Content> </SplitView.Content>
</SplitView> </SplitView>
</cwuc:Case>
<cwuc:Case Value="Grid">
<GridView
Padding="12,12,6,0"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left"
ItemContainerStyle="{StaticResource LargeGridViewItemStyle}"
ItemsSource="{Binding AchievementGoals}"
SelectedItem="{Binding SelectedAchievementGoal, Mode=TwoWay}"
SelectionMode="Single">
<GridView.ItemTemplate>
<DataTemplate>
<Border MinWidth="180" Style="{StaticResource BorderCardStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<shci:CachedImage
Grid.Row="0"
Width="64"
Height="64"
Margin="8"
Source="{Binding Icon}"/>
<StackPanel Grid.Row="1" Margin="8,0">
<TextBlock
HorizontalAlignment="Center"
Text="{Binding Name}"
TextTrimming="CharacterEllipsis"
TextWrapping="NoWrap"/>
<TextBlock
Margin="0,2,0,0"
HorizontalAlignment="Center"
Opacity="0.7"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{Binding FinishDescription}"/>
<ProgressBar
Margin="0,8"
Maximum="1"
Value="{Binding FinishPercent}"/>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</cwuc:Case>
</cwuc:SwitchPresenter>
</Grid> </Grid>
<Grid Visibility="{Binding SelectedArchive, Converter={StaticResource EmptyObjectToVisibilityRevertConverter}}"> <Grid Visibility="{Binding SelectedArchive, Converter={StaticResource EmptyObjectToVisibilityRevertConverter}}">

View File

@@ -18,6 +18,7 @@
xmlns:shct="using:Snap.Hutao.Control.Text" xmlns:shct="using:Snap.Hutao.Control.Text"
xmlns:shva="using:Snap.Hutao.ViewModel.AvatarProperty" xmlns:shva="using:Snap.Hutao.ViewModel.AvatarProperty"
xmlns:shvcont="using:Snap.Hutao.View.Control" xmlns:shvcont="using:Snap.Hutao.View.Control"
xmlns:shvconv="using:Snap.Hutao.View.Converter"
d:DataContext="{d:DesignInstance shva:AvatarPropertyViewModel}" d:DataContext="{d:DesignInstance shva:AvatarPropertyViewModel}"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
mc:Ignorable="d"> mc:Ignorable="d">
@@ -35,24 +36,31 @@
<x:Double>0.5</x:Double> <x:Double>0.5</x:Double>
</cwuconv:BoolToObjectConverter.FalseValue> </cwuconv:BoolToObjectConverter.FalseValue>
</cwuconv:BoolToObjectConverter> </cwuconv:BoolToObjectConverter>
<shvconv:PanelSelectorModeConverter
x:Key="PanelSelectorModeConverter"
GridValue="{x:Bind GridImageExportPanel}"
ListValue="{x:Bind ListImageExportPanel}"/>
</Page.Resources> </Page.Resources>
<Grid> <Grid>
<Grid Visibility="{Binding Summary, Converter={StaticResource EmptyObjectToVisibilityConverter}}"> <Grid Visibility="{Binding Summary, Converter={StaticResource EmptyObjectToVisibilityConverter}}">
<Rectangle <Grid>
Height="{StaticResource AppBarThemeCompactHeight}" <Grid.RowDefinitions>
VerticalAlignment="Top" <RowDefinition Height="auto"/>
Fill="{ThemeResource CardBackgroundFillColorDefaultBrush}" <RowDefinition/>
IsHitTestVisible="False"/> </Grid.RowDefinitions>
<Pivot>
<Pivot.LeftHeader> <CommandBar
<shcp:PanelSelector x:Name="ItemsPanelSelector" Margin="6,0,0,0"/> Grid.Row="0"
</Pivot.LeftHeader> Background="{StaticResource CardBackgroundFillColorDefaultBrush}"
<Pivot.RightHeader> DefaultLabelPosition="Right">
<CommandBar DefaultLabelPosition="Right"> <CommandBar.Content>
<shcp:PanelSelector x:Name="ItemsPanelSelector" Margin="6,8,0,0"/>
</CommandBar.Content>
<AppBarButton <AppBarButton
Command="{Binding ExportAsImageCommand}" Command="{Binding ExportAsImageCommand}"
CommandParameter="{Binding ElementName=ImageExportPanel}" CommandParameter="{Binding ElementName=ItemsPanelSelector, Path=Current, Converter={StaticResource PanelSelectorModeConverter}}"
Icon="{shcm:FontIcon Glyph=&#xE91B;}" Icon="{shcm:FontIcon Glyph=&#xE91B;}"
Label="{shcm:ResourceString Name=ViewPageAvatarPropertyExportAsImage}"/> Label="{shcm:ResourceString Name=ViewPageAvatarPropertyExportAsImage}"/>
<AppBarButton <AppBarButton
@@ -71,10 +79,18 @@
</AppBarButton.Flyout> </AppBarButton.Flyout>
</AppBarButton> </AppBarButton>
</CommandBar> </CommandBar>
</Pivot.RightHeader>
<PivotItem Header="{shcm:ResourceString Name=ViewPageAvatarPropertyPivotOverviewHeader}"> <cwucont:SwitchPresenter Grid.Row="1" Value="{Binding ElementName=ItemsPanelSelector, Path=Current}">
<cwucont:SwitchPresenter.ContentTransitions>
<TransitionCollection>
<ContentThemeTransition/>
</TransitionCollection>
</cwucont:SwitchPresenter.ContentTransitions>
<cwucont:Case Value="Grid">
<ScrollViewer>
<StackPanel x:Name="GridImageExportPanel" Background="Transparent">
<GridView <GridView
Margin="16,16,0,-4" Margin="16,16,4,-8"
cwua:ItemsReorderAnimation.Duration="0:0:0.1" cwua:ItemsReorderAnimation.Duration="0:0:0.1"
ItemContainerStyle="{StaticResource LargeGridViewItemStyle}" ItemContainerStyle="{StaticResource LargeGridViewItemStyle}"
ItemsSource="{Binding Summary.Avatars}" ItemsSource="{Binding Summary.Avatars}"
@@ -184,8 +200,10 @@
</DataTemplate> </DataTemplate>
</GridView.ItemTemplate> </GridView.ItemTemplate>
</GridView> </GridView>
</PivotItem> </StackPanel>
<PivotItem Header="{shcm:ResourceString Name=ViewPageAvatarPropertyPivotDetailHeader}"> </ScrollViewer>
</cwucont:Case>
<cwucont:Case Value="List">
<SplitView <SplitView
Grid.Row="1" Grid.Row="1"
DisplayMode="Inline" DisplayMode="Inline"
@@ -193,13 +211,6 @@
OpenPaneLength="{StaticResource CompatSplitViewOpenPaneLength}" OpenPaneLength="{StaticResource CompatSplitViewOpenPaneLength}"
PaneBackground="Transparent"> PaneBackground="Transparent">
<SplitView.Pane> <SplitView.Pane>
<cwucont:SwitchPresenter Value="{Binding ElementName=ItemsPanelSelector, Path=Current}">
<cwucont:SwitchPresenter.ContentTransitions>
<TransitionCollection>
<ContentThemeTransition/>
</TransitionCollection>
</cwucont:SwitchPresenter.ContentTransitions>
<cwucont:Case Value="List">
<ListView ItemsSource="{Binding Summary.Avatars}" SelectedItem="{Binding SelectedAvatar, Mode=TwoWay}"> <ListView ItemsSource="{Binding Summary.Avatars}" SelectedItem="{Binding SelectedAvatar, Mode=TwoWay}">
<ListView.ItemTemplate> <ListView.ItemTemplate>
<DataTemplate> <DataTemplate>
@@ -226,31 +237,11 @@
</DataTemplate> </DataTemplate>
</ListView.ItemTemplate> </ListView.ItemTemplate>
</ListView> </ListView>
</cwucont:Case>
<cwucont:Case Value="Grid">
<GridView
Margin="6,6,0,0"
HorizontalAlignment="Stretch"
ItemsSource="{Binding Summary.Avatars}"
SelectedItem="{Binding SelectedAvatar, Mode=TwoWay}"
SelectionMode="Single">
<GridView.ItemTemplate>
<DataTemplate>
<shvcont:ItemIcon
Width="44"
Height="44"
Icon="{Binding Icon}"
Quality="{Binding Quality}"/>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</cwucont:Case>
</cwucont:SwitchPresenter>
</SplitView.Pane> </SplitView.Pane>
<SplitView.Content> <SplitView.Content>
<ScrollViewer Padding="0,0,0,0"> <ScrollViewer>
<StackPanel <StackPanel
Name="ImageExportPanel" Name="ListImageExportPanel"
MaxWidth="800" MaxWidth="800"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Background="Transparent"> Background="Transparent">
@@ -747,8 +738,9 @@
</ScrollViewer> </ScrollViewer>
</SplitView.Content> </SplitView.Content>
</SplitView> </SplitView>
</PivotItem> </cwucont:Case>
</Pivot> </cwucont:SwitchPresenter>
</Grid>
</Grid> </Grid>
<Grid Visibility="{Binding Summary, Converter={StaticResource EmptyObjectToVisibilityRevertConverter}}"> <Grid Visibility="{Binding Summary, Converter={StaticResource EmptyObjectToVisibilityRevertConverter}}">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">

View File

@@ -213,7 +213,7 @@
<SplitView <SplitView
DisplayMode="Inline" DisplayMode="Inline"
IsPaneOpen="True" IsPaneOpen="True"
OpenPaneLength="296" OpenPaneLength="323"
PaneBackground="Transparent"> PaneBackground="Transparent">
<SplitView.Pane> <SplitView.Pane>
<ListView ItemsSource="{Binding Statistics.HistoryWishes}" SelectedItem="{Binding SelectedHistoryWish, Mode=TwoWay}"> <ListView ItemsSource="{Binding Statistics.HistoryWishes}" SelectedItem="{Binding SelectedHistoryWish, Mode=TwoWay}">
@@ -241,64 +241,66 @@
HorizontalAlignment="Right" HorizontalAlignment="Right"
Style="{StaticResource BaseTextBlockStyle}" Style="{StaticResource BaseTextBlockStyle}"
Text="{Binding TotalCountFormatted}"/> Text="{Binding TotalCountFormatted}"/>
<Border <ItemsControl
Grid.Row="1" Grid.Row="1"
Margin="0,6,0,0" Margin="0,6,0,0"
Padding="2"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Background="{StaticResource CardBackgroundFillColorDefault}" ItemsSource="{Binding OrangeUpList}">
CornerRadius="{StaticResource CompatCornerRadiusSmall}">
<ItemsControl ItemsSource="{Binding OrangeUpList}">
<ItemsControl.ItemsPanel> <ItemsControl.ItemsPanel>
<ItemsPanelTemplate> <ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/> <StackPanel Orientation="Horizontal" Spacing="2"/>
</ItemsPanelTemplate> </ItemsPanelTemplate>
</ItemsControl.ItemsPanel> </ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate> <DataTemplate>
<StackPanel Margin="2"> <Border Width="40" Style="{StaticResource BorderCardStyle}">
<shci:CachedImage <StackPanel>
Width="32" <shvc:ItemIcon
Height="32" Width="40"
Source="{Binding Icon}"/> Height="40"
Icon="{Binding Icon}"
Quality="{Binding Quality}"/>
<TextBlock <TextBlock
Margin="0,2,0,0" HorizontalTextAlignment="Center"
HorizontalAlignment="Center" Style="{StaticResource CaptionTextBlockStyle}"
Text="{Binding Count}"/> Text="{Binding Count}"
TextTrimming="None"
TextWrapping="NoWrap"/>
</StackPanel> </StackPanel>
</Border>
</DataTemplate> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl.ItemTemplate>
</ItemsControl> </ItemsControl>
</Border> <ItemsControl
<Border
Grid.Row="1" Grid.Row="1"
Margin="0,6,0,0" Margin="0,6,0,0"
Padding="2"
HorizontalAlignment="Right" HorizontalAlignment="Right"
Background="{StaticResource CardBackgroundFillColorDefault}" ItemsSource="{Binding PurpleUpList}">
CornerRadius="{StaticResource CompatCornerRadiusSmall}">
<ItemsControl ItemsSource="{Binding PurpleUpList}">
<ItemsControl.ItemsPanel> <ItemsControl.ItemsPanel>
<ItemsPanelTemplate> <ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/> <StackPanel Orientation="Horizontal" Spacing="2"/>
</ItemsPanelTemplate> </ItemsPanelTemplate>
</ItemsControl.ItemsPanel> </ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate> <DataTemplate>
<StackPanel Margin="2"> <Border Width="40" Style="{StaticResource BorderCardStyle}">
<shci:CachedImage <StackPanel>
Width="32" <shvc:ItemIcon
Height="32" Width="40"
Source="{Binding Icon}"/> Height="40"
Icon="{Binding Icon}"
Quality="{Binding Quality}"/>
<TextBlock <TextBlock
Margin="0,2,0,0" HorizontalTextAlignment="Center"
HorizontalAlignment="Center" Style="{StaticResource CaptionTextBlockStyle}"
Text="{Binding Count}"/> Text="{Binding Count}"
TextTrimming="None"
TextWrapping="NoWrap"/>
</StackPanel> </StackPanel>
</Border>
</DataTemplate> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl.ItemTemplate>
</ItemsControl> </ItemsControl>
</Border>
<StackPanel <StackPanel
Grid.Row="2" Grid.Row="2"
Margin="0,6,0,8" Margin="0,6,0,8"

View File

@@ -30,7 +30,10 @@
PaneBackground="Transparent" PaneBackground="Transparent"
Visibility="{Binding SpiralAbyssView, Converter={StaticResource EmptyObjectToVisibilityConverter}}"> Visibility="{Binding SpiralAbyssView, Converter={StaticResource EmptyObjectToVisibilityConverter}}">
<SplitView.Pane> <SplitView.Pane>
<ListView ItemsSource="{Binding SpiralAbyssEntries}" SelectedItem="{Binding SelectedEntry, Mode=TwoWay}"> <ListView
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
ItemsSource="{Binding SpiralAbyssEntries}"
SelectedItem="{Binding SelectedEntry, Mode=TwoWay}">
<ListView.ItemTemplate> <ListView.ItemTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding Schedule}"/> <TextBlock Text="{Binding Schedule}"/>
@@ -254,19 +257,12 @@
ItemsSource="{Binding Avatars}"> ItemsSource="{Binding Avatars}">
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate> <DataTemplate>
<shvc:BottomTextControl Margin="0,0,8,0" Text="{Binding Name}">
<shvc:BottomTextControl.Resources>
<Style BasedOn="{StaticResource CaptionTextBlockStyle}" TargetType="TextBlock">
<Setter Property="TextWrapping" Value="NoWrap"/>
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
</Style>
</shvc:BottomTextControl.Resources>
<shvc:ItemIcon <shvc:ItemIcon
Width="60" Width="60"
Height="60" Height="60"
Margin="0,0,8,0"
Icon="{Binding Icon}" Icon="{Binding Icon}"
Quality="{Binding Quality}"/> Quality="{Binding Quality}"/>
</shvc:BottomTextControl>
</DataTemplate> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl.ItemTemplate>
</ItemsControl> </ItemsControl>

View File

@@ -153,7 +153,7 @@
<ScrollViewer> <ScrollViewer>
<StackPanel <StackPanel
MaxWidth="800" MaxWidth="800"
Margin="0,0,20,16" Margin="0,0,16,16"
HorizontalAlignment="Left"> HorizontalAlignment="Left">
<!-- 简介 --> <!-- 简介 -->
<Grid Margin="16,16,0,16" VerticalAlignment="Top"> <Grid Margin="16,16,0,16" VerticalAlignment="Top">
@@ -585,7 +585,7 @@
</cwuc:Case> </cwuc:Case>
<cwuc:Case Value="Grid"> <cwuc:Case Value="Grid">
<GridView <GridView
Padding="12,12,6,0" Padding="12,12,2,0"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
ItemContainerStyle="{StaticResource LargeGridViewItemStyle}" ItemContainerStyle="{StaticResource LargeGridViewItemStyle}"

View File

@@ -54,15 +54,15 @@
</AutoSuggestBox> </AutoSuggestBox>
</AppBarElementContainer> </AppBarElementContainer>
</CommandBar> </CommandBar>
<cwuc:SwitchPresenter Grid.Row="1" Value="{Binding ElementName=ItemsPanelSelector, Path=Current}">
<cwuc:Case Value="List">
<SplitView <SplitView
Grid.Row="1"
DisplayMode="Inline" DisplayMode="Inline"
IsPaneOpen="True" IsPaneOpen="True"
OpenPaneLength="{StaticResource CompatSplitViewOpenPaneLength2}" OpenPaneLength="{StaticResource CompatSplitViewOpenPaneLength2}"
PaneBackground="{StaticResource CardBackgroundFillColorSecondary}"> PaneBackground="{StaticResource CardBackgroundFillColorSecondary}">
<SplitView.Pane> <SplitView.Pane>
<cwuc:SwitchPresenter Grid.Row="1" Value="{Binding ElementName=ItemsPanelSelector, Path=Current}">
<cwuc:Case Value="List">
<ListView <ListView
Grid.Row="1" Grid.Row="1"
ItemsSource="{Binding Monsters}" ItemsSource="{Binding Monsters}"
@@ -99,32 +99,6 @@
</DataTemplate> </DataTemplate>
</ListView.ItemTemplate> </ListView.ItemTemplate>
</ListView> </ListView>
</cwuc:Case>
<cwuc:Case Value="Grid">
<GridView
Margin="6,6,0,0"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left"
ItemsSource="{Binding Monsters}"
SelectedItem="{Binding Selected, Mode=TwoWay}"
SelectionMode="Single">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Orientation="Horizontal"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemTemplate>
<DataTemplate>
<shvc:ItemIcon
Width="46"
Height="46"
Icon="{Binding Icon, Converter={StaticResource MonsterIconConverter}, Mode=OneWay}"
Quality="QUALITY_NONE"/>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</cwuc:Case>
</cwuc:SwitchPresenter>
</SplitView.Pane> </SplitView.Pane>
<SplitView.Content> <SplitView.Content>
<ScrollViewer> <ScrollViewer>
@@ -133,7 +107,7 @@
<ColumnDefinition MaxWidth="800"/> <ColumnDefinition MaxWidth="800"/>
<ColumnDefinition Width="auto"/> <ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Margin="0,0,20,0"> <StackPanel Margin="0,0,16,0">
<TextBlock <TextBlock
Margin="16,16,0,0" Margin="16,16,0,0"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
@@ -204,6 +178,32 @@
</ScrollViewer> </ScrollViewer>
</SplitView.Content> </SplitView.Content>
</SplitView> </SplitView>
</cwuc:Case>
<cwuc:Case Value="Grid">
<GridView
Padding="12,12,2,0"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left"
ItemContainerStyle="{StaticResource LargeGridViewItemStyle}"
ItemsSource="{Binding Monsters}"
SelectedItem="{Binding Selected, Mode=TwoWay}"
SelectionMode="Single">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Orientation="Horizontal"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemTemplate>
<DataTemplate>
<shvc:BottomTextControl Text="{Binding Title}">
<shvc:ItemIcon Icon="{Binding Icon, Converter={StaticResource MonsterIconConverter}, Mode=OneWay}" Quality="QUALITY_NONE"/>
</shvc:BottomTextControl>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</cwuc:Case>
</cwuc:SwitchPresenter>
</Grid> </Grid>
<shvc:LoadingView IsLoading="{Binding Monsters, Converter={StaticResource EmptyObjectToBoolRevertConverter}}"/> <shvc:LoadingView IsLoading="{Binding Monsters, Converter={StaticResource EmptyObjectToBoolRevertConverter}}"/>
</Grid> </Grid>

View File

@@ -69,15 +69,19 @@
Icon="{shcm:FontIcon Glyph=&#xE8EF;}" Icon="{shcm:FontIcon Glyph=&#xE8EF;}"
Label="{shcm:ResourceString Name=ViewPageWiKiGeneralAddToDevPlanButtonLabel}"/> Label="{shcm:ResourceString Name=ViewPageWiKiGeneralAddToDevPlanButtonLabel}"/>
</CommandBar> </CommandBar>
<cwuc:SwitchPresenter Grid.Row="1" Value="{Binding ElementName=ItemsPanelSelector, Path=Current}">
<cwuc:SwitchPresenter.ContentTransitions>
<TransitionCollection>
<ContentThemeTransition/>
</TransitionCollection>
</cwuc:SwitchPresenter.ContentTransitions>
<cwuc:Case Value="List">
<SplitView <SplitView
Grid.Row="1"
DisplayMode="Inline" DisplayMode="Inline"
IsPaneOpen="True" IsPaneOpen="True"
OpenPaneLength="{StaticResource CompatSplitViewOpenPaneLength}" OpenPaneLength="{StaticResource CompatSplitViewOpenPaneLength}"
PaneBackground="{StaticResource CardBackgroundFillColorSecondary}"> PaneBackground="{StaticResource CardBackgroundFillColorSecondary}">
<SplitView.Pane> <SplitView.Pane>
<cwuc:SwitchPresenter Grid.Row="1" Value="{Binding ElementName=ItemsPanelSelector, Path=Current}">
<cwuc:Case Value="List">
<ListView <ListView
Grid.Row="1" Grid.Row="1"
ItemsSource="{Binding Weapons}" ItemsSource="{Binding Weapons}"
@@ -105,27 +109,7 @@
</DataTemplate> </DataTemplate>
</ListView.ItemTemplate> </ListView.ItemTemplate>
</ListView> </ListView>
</cwuc:Case>
<cwuc:Case Value="Grid">
<GridView
Margin="6,6,0,0"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left"
ItemsSource="{Binding Weapons}"
SelectedItem="{Binding Selected, Mode=TwoWay}"
SelectionMode="Single">
<GridView.ItemTemplate>
<DataTemplate>
<shvc:ItemIcon
Width="44"
Height="44"
Icon="{Binding Icon, Converter={StaticResource EquipIconConverter}, Mode=OneWay}"
Quality="{Binding Quality}"/>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</cwuc:Case>
</cwuc:SwitchPresenter>
</SplitView.Pane> </SplitView.Pane>
<SplitView.Content> <SplitView.Content>
<ScrollViewer> <ScrollViewer>
@@ -134,7 +118,7 @@
<ColumnDefinition MaxWidth="800"/> <ColumnDefinition MaxWidth="800"/>
<ColumnDefinition Width="auto"/> <ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Margin="0,0,20,0"> <StackPanel Margin="0,0,16,0">
<Border <Border
Margin="16,16,0,0" Margin="16,16,0,0"
BorderBrush="{StaticResource CardStrokeColorDefault}" BorderBrush="{StaticResource CardStrokeColorDefault}"
@@ -243,6 +227,27 @@
</ScrollViewer> </ScrollViewer>
</SplitView.Content> </SplitView.Content>
</SplitView> </SplitView>
</cwuc:Case>
<cwuc:Case Value="Grid">
<GridView
Padding="12,12,2,0"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left"
ItemContainerStyle="{StaticResource LargeGridViewItemStyle}"
ItemsSource="{Binding Weapons}"
SelectedItem="{Binding Selected, Mode=TwoWay}"
SelectionMode="Single">
<GridView.ItemTemplate>
<DataTemplate>
<shvc:BottomTextControl Text="{Binding Name}">
<shvc:ItemIcon Icon="{Binding Icon, Converter={StaticResource EquipIconConverter}, Mode=OneWay}" Quality="{Binding Quality}"/>
</shvc:BottomTextControl>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</cwuc:Case>
</cwuc:SwitchPresenter>
</Grid> </Grid>
<shvc:LoadingView IsLoading="{Binding Weapons, Converter={StaticResource EmptyObjectToBoolRevertConverter}}"/> <shvc:LoadingView IsLoading="{Binding Weapons, Converter={StaticResource EmptyObjectToBoolRevertConverter}}"/>
</Grid> </Grid>

View File

@@ -239,7 +239,7 @@ internal sealed partial class AvatarPropertyViewModel : Abstraction.ViewModel, I
using (SoftwareBitmap softwareBitmap = SoftwareBitmap.CreateCopyFromBuffer(buffer, BitmapPixelFormat.Bgra8, bitmap.PixelWidth, bitmap.PixelHeight)) using (SoftwareBitmap softwareBitmap = SoftwareBitmap.CreateCopyFromBuffer(buffer, BitmapPixelFormat.Bgra8, bitmap.PixelWidth, bitmap.PixelHeight))
{ {
Color tintColor = serviceProvider.GetRequiredService<IAppResourceProvider>().GetResource<Color>("CompatBackgroundColor"); Color tintColor = serviceProvider.GetRequiredService<IAppResourceProvider>().GetResource<Color>("CompatBackgroundColor");
Bgra8 tint = Bgra8.FromColor(tintColor); Bgra32 tint = Bgra32.FromColor(tintColor);
softwareBitmap.NormalBlend(tint); softwareBitmap.NormalBlend(tint);
using (InMemoryRandomAccessStream memory = new()) using (InMemoryRandomAccessStream memory = new())
{ {

View File

@@ -5,10 +5,7 @@ using System.Buffers.Binary;
using System.Numerics; using System.Numerics;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using Windows.Graphics; using Windows.Graphics;
using Windows.Win32.Foundation;
using Windows.Win32.System.Diagnostics.ToolHelp;
using Windows.Win32.UI.WindowsAndMessaging; using Windows.Win32.UI.WindowsAndMessaging;
using static Windows.Win32.PInvoke;
namespace Snap.Hutao.Win32; namespace Snap.Hutao.Win32;
@@ -18,15 +15,6 @@ namespace Snap.Hutao.Win32;
[HighQuality] [HighQuality]
internal static class StructMarshal internal static class StructMarshal
{ {
/// <summary>
/// 构造一个新的 <see cref="Windows.Win32.System.Diagnostics.ToolHelp.MODULEENTRY32"/>
/// </summary>
/// <returns>新的实例</returns>
public static unsafe MODULEENTRY32 MODULEENTRY32()
{
return new() { dwSize = SizeOf<MODULEENTRY32>() };
}
/// <summary> /// <summary>
/// 构造一个新的 <see cref="Windows.Win32.UI.WindowsAndMessaging.WINDOWPLACEMENT"/> /// 构造一个新的 <see cref="Windows.Win32.UI.WindowsAndMessaging.WINDOWPLACEMENT"/>
/// </summary> /// </summary>
@@ -91,25 +79,4 @@ internal static class StructMarshal
{ {
return new(point.X, point.Y, size.Width, size.Height); return new(point.X, point.Y, size.Width, size.Height);
} }
/// <summary>
/// 枚举快照的模块
/// </summary>
/// <param name="snapshot">快照</param>
/// <returns>模块枚举</returns>
[SuppressMessage("", "SH002")]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static IEnumerable<MODULEENTRY32> EnumerateModuleEntry32(HANDLE snapshot)
{
MODULEENTRY32 entry = MODULEENTRY32();
if (Module32First(snapshot, ref entry))
{
do
{
yield return entry;
}
while (Module32Next(snapshot, ref entry));
}
}
} }