This commit is contained in:
DismissedLight
2024-06-27 10:44:39 +08:00
parent 0c1968ff49
commit 3211bfbbd6
40 changed files with 400 additions and 347 deletions

View File

@@ -13,19 +13,19 @@ public sealed class JsonSerializeTest
NumberHandling = JsonNumberHandling.AllowReadingFromString,
};
private const string SmapleObjectJson = """
private const string SampleObjectJson = """
{
"A" :1
}
""";
private const string SmapleEmptyStringObjectJson = """
private const string SampleEmptyStringObjectJson = """
{
"A" : ""
}
""";
private const string SmapleNumberKeyDictionaryJson = """
private const string SampleNumberKeyDictionaryJson = """
{
"111" : "12",
"222" : "34"
@@ -35,7 +35,7 @@ public sealed class JsonSerializeTest
[TestMethod]
public void DelegatePropertyCanSerialize()
{
SampleDelegatePropertyClass sample = JsonSerializer.Deserialize<SampleDelegatePropertyClass>(SmapleObjectJson)!;
SampleDelegatePropertyClass sample = JsonSerializer.Deserialize<SampleDelegatePropertyClass>(SampleObjectJson)!;
Assert.AreEqual(sample.B, 1);
}
@@ -43,14 +43,23 @@ public sealed class JsonSerializeTest
[ExpectedException(typeof(JsonException))]
public void EmptyStringCannotSerializeAsNumber()
{
SampleStringReadWriteNumberPropertyClass sample = JsonSerializer.Deserialize<SampleStringReadWriteNumberPropertyClass>(SmapleEmptyStringObjectJson)!;
SampleStringReadWriteNumberPropertyClass sample = JsonSerializer.Deserialize<SampleStringReadWriteNumberPropertyClass>(SampleEmptyStringObjectJson)!;
Assert.AreEqual(sample.A, 0);
}
[TestMethod]
public void EmptyStringCanSerializeAsUri()
{
SampleEmptyUriClass sample = JsonSerializer.Deserialize<SampleEmptyUriClass>(SampleEmptyStringObjectJson)!;
Uri.TryCreate("", UriKind.RelativeOrAbsolute, out Uri? value);
Console.WriteLine(value);
Assert.AreEqual(sample.A, value);
}
[TestMethod]
public void NumberStringKeyCanSerializeAsKey()
{
Dictionary<int, string> sample = JsonSerializer.Deserialize<Dictionary<int, string>>(SmapleNumberKeyDictionaryJson, AlowStringNumberOptions)!;
Dictionary<int, string> sample = JsonSerializer.Deserialize<Dictionary<int, string>>(SampleNumberKeyDictionaryJson, AlowStringNumberOptions)!;
Assert.AreEqual(sample[111], "12");
}
@@ -92,6 +101,11 @@ public sealed class JsonSerializeTest
public int A { get; set; }
}
private sealed class SampleEmptyUriClass
{
public Uri A { get; set; } = default!;
}
private sealed class SampleByteArrayPropertyClass
{
public byte[]? Array { get; set; }

View File

@@ -10,12 +10,14 @@
<ResourceDictionary Source="ms-appx:///CommunityToolkit.WinUI.Controls.TokenizingTextBox/TokenizingTextBox.xaml"/>
<ResourceDictionary Source="ms-appx:///CommunityToolkit.Labs.WinUI.TokenView/TokenItem/TokenItem.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Elevation.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/ItemIcon.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Loading.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Card/CardBlock.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Card/CardProgressBar.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Card/HorizontalCard.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Card/VerticalCard.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Image/CachedImage.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/TextBlock/RateDeltaTextBlock.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/Card.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/Color.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/ComboBox.xaml"/>
@@ -36,7 +38,6 @@
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/TransitionCollection.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/Uri.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/WindowOverride.xaml"/>
<ResourceDictionary Source="ms-appx:///View/Control/RateDeltaTextBlockStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style

View File

@@ -94,6 +94,7 @@
<None Remove="UI\Xaml\Control\Card\HorizontalCard.xaml" />
<None Remove="UI\Xaml\Control\Card\VerticalCard.xaml" />
<None Remove="UI\Xaml\Control\Elevation.xaml" />
<None Remove="UI\Xaml\Control\ItemIcon.xaml" />
<None Remove="UI\Xaml\Control\Theme\Card.xaml" />
<None Remove="UI\Xaml\Control\Theme\Color.xaml" />
<None Remove="UI\Xaml\Control\Theme\ComboBox.xaml" />
@@ -156,10 +157,7 @@
<None Remove="View\Control\BaseValueSlider.xaml" />
<None Remove="View\Control\DescParamComboBox.xaml" />
<None Remove="View\Control\HutaoStatisticsCard.xaml" />
<None Remove="View\Control\ItemIcon.xaml" />
<None Remove="View\Control\LaunchGameResourceExpander.xaml" />
<None Remove="View\Control\LoadingView.xaml" />
<None Remove="View\Control\LoadingViewSlim.xaml" />
<None Remove="View\Control\RateDeltaTextBlockStyle.xaml" />
<None Remove="View\Control\SkillPivot.xaml" />
<None Remove="View\Control\SegmentedOverride.xaml" />
@@ -465,23 +463,12 @@
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="View\Control\LoadingViewSlim.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<!-- Pages -->
<ItemGroup>
<Page Update="View\Page\TestPage.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="View\Control\LoadingView.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="View\Page\SpiralAbyssRecordPage.xaml">
<Generator>MSBuild:Compile</Generator>
@@ -582,11 +569,6 @@
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="View\Control\ItemIcon.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="View\Control\StatisticsCard.xaml">
<Generator>MSBuild:Compile</Generator>
@@ -646,6 +628,11 @@
<Folder Include="UI\Xaml\View\Card\" />
<Folder Include="UI\Xaml\View\Page\" />
</ItemGroup>
<ItemGroup>
<Page Update="UI\Xaml\Control\ItemIcon.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="UI\Xaml\Control\Card\VerticalCard.xaml">
<Generator>MSBuild:Compile</Generator>

View File

@@ -0,0 +1,9 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.UI.Windowing.Abstraction;
internal interface IXamlWindowClosed
{
void OnWindowClosed();
}

View File

@@ -131,6 +131,12 @@ internal sealed class XamlWindowController
subclass?.Dispose();
windowNonRudeHWND?.Dispose();
if (window is IXamlWindowClosed xamlWindowClosed)
{
xamlWindowClosed.OnWindowClosed();
}
window.UninitializeController();
}
@@ -233,8 +239,8 @@ internal sealed class XamlWindowController
rect.Width = Math.Min(workAreaRect.Width, rect.Width);
rect.Height = Math.Min(workAreaRect.Height, rect.Height);
rect.X = workAreaRect.X + (workAreaRect.Width - rect.Width) / 2;
rect.Y = workAreaRect.Y + (workAreaRect.Height - rect.Height) / 2;
rect.X = workAreaRect.X + ((workAreaRect.Width - rect.Width) / 2);
rect.Y = workAreaRect.Y + ((workAreaRect.Height - rect.Height) / 2);
}
private void RecoverOrInitWindowSize(IXamlWindowHasInitSize xamlWindow)

View File

@@ -7,9 +7,6 @@ using Microsoft.Xaml.Interactivity;
namespace Snap.Hutao.UI.Xaml.Behavior.Action;
/// <summary>
/// 打开附着的浮出控件操作
/// </summary>
[HighQuality]
internal sealed class ShowAttachedFlyoutAction : DependencyObject, IAction
{

View File

@@ -0,0 +1,19 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Microsoft.UI.Xaml;
using Microsoft.Xaml.Interactivity;
using Snap.Hutao.UI.Xaml.View.Window;
namespace Snap.Hutao.UI.Xaml.Behavior.Action;
[DependencyProperty("ContentProvider", typeof(IWebView2ContentProvider))]
internal sealed partial class ShowWebView2WindowAction : DependencyObject, IAction
{
public object? Execute(object sender, object parameter)
{
WebView2Window window = new(((FrameworkElement)sender).XamlRoot.ContentIslandEnvironment.AppWindowId, ContentProvider);
window.Activate();
return default!;
}
}

View File

@@ -0,0 +1,13 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Model.Intrinsic;
namespace Snap.Hutao.UI.Xaml.Control;
[DependencyProperty("Quality", typeof(QualityType), QualityType.QUALITY_NONE)]
[DependencyProperty("Icon", typeof(Uri))]
[DependencyProperty("Badge", typeof(Uri))]
internal sealed partial class ItemIcon : Microsoft.UI.Xaml.Controls.Control
{
}

View File

@@ -0,0 +1,37 @@
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cw="using:CommunityToolkit.WinUI"
xmlns:shmmc="using:Snap.Hutao.Model.Metadata.Converter"
xmlns:shux="using:Snap.Hutao.UI.Xaml"
xmlns:shuxc="using:Snap.Hutao.UI.Xaml.Control"
xmlns:shuxci="using:Snap.Hutao.UI.Xaml.Control.Image">
<shmmc:QualityConverter x:Key="QualityConverter"/>
<Style BasedOn="{StaticResource DefaultItemIconStyle}" TargetType="shuxc:ItemIcon"/>
<Style x:Key="DefaultItemIconStyle" TargetType="shuxc:ItemIcon">
<Setter Property="Height" Value="80"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="shuxc:ItemIcon">
<Grid CornerRadius="{StaticResource ControlCornerRadius}">
<shuxci:CachedImage cw:FrameworkElementExtensions.AncestorType="shuxc:ItemIcon" Source="{Binding (cw:FrameworkElementExtensions.Ancestor).Quality, RelativeSource={RelativeSource Self}, Converter={StaticResource QualityConverter}, Mode=OneWay}"/>
<shuxci:CachedImage Source="{StaticResource UI_ImgSign_ItemIcon}"/>
<shuxci:CachedImage Source="{TemplateBinding Icon}"/>
<shuxci:CachedImage
Margin="2"
HorizontalAlignment="Left"
VerticalAlignment="Top"
cw:FrameworkElementExtensions.AncestorType="shuxc:ItemIcon"
shux:FrameworkElementHelper.SquareLength="16"
Source="{TemplateBinding Badge}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Width" Value="80"/>
</Style>
</ResourceDictionary>

View File

@@ -1,7 +1,11 @@
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:shuxc="using:Snap.Hutao.UI.Xaml.Control">
xmlns:clw="using:CommunityToolkit.Labs.WinUI"
xmlns:cw="using:CommunityToolkit.WinUI"
xmlns:shuxc="using:Snap.Hutao.UI.Xaml.Control"
xmlns:shuxci="using:Snap.Hutao.UI.Xaml.Control.Image"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup">
<Style BasedOn="{StaticResource DefaultLoadingStyle}" TargetType="shuxc:Loading"/>
@@ -22,11 +26,7 @@
x:Name="ContentGrid"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
x:Load="True">
<ContentPresenter.RenderTransform>
<CompositeTransform/>
</ContentPresenter.RenderTransform>
</ContentPresenter>
x:Load="True"/>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="LoadingIn">
@@ -85,4 +85,58 @@
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
<Style
x:Key="DefaultLoadingViewStyle"
BasedOn="{StaticResource DefaultLoadingStyle}"
TargetType="shuxc:Loading">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<clw:Shimmer
cw:FrameworkElementExtensions.AncestorType="shuxc:Loading"
CornerRadius="{Binding (cw:FrameworkElementExtensions.Ancestor).CornerRadius, RelativeSource={RelativeSource Self}}"
IsActive="{Binding (cw:FrameworkElementExtensions.Ancestor).IsLoading, RelativeSource={RelativeSource Self}, Mode=OneWay}"
Duration="0:0:1"/>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<shuxci:CachedImage
Width="120"
Height="120"
Source="{StaticResource UI_EmotionIcon272}"/>
<TextBlock
Margin="0,16,0,0"
HorizontalAlignment="Center"
Style="{StaticResource SubtitleTextBlockStyle}"
Text="{shuxm:ResourceString Name=ViewControlLoadingText}"/>
</StackPanel>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="IsHitTestVisible" Value="False"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
</Style>
<Style
x:Key="DefaultLoadingCardStyle"
BasedOn="{StaticResource DefaultLoadingStyle}"
TargetType="shuxc:Loading">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<clw:Shimmer
cw:FrameworkElementExtensions.AncestorType="shuxc:Loading"
CornerRadius="0"
IsActive="{Binding (cw:FrameworkElementExtensions.Ancestor).IsLoading, RelativeSource={RelativeSource Self}, Mode=OneWay}"
Duration="0:0:1"/>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="Height" Value="{ThemeResource HomeAdaptiveCardHeight}"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="IsHitTestVisible" Value="False"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
</Style>
</ResourceDictionary>

View File

@@ -4,7 +4,7 @@
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
namespace Snap.Hutao.View.Control;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock;
[TemplateVisualState(Name = "PositiveValue", GroupName = "CommonStates")]
[TemplateVisualState(Name = "NegativeValue", GroupName = "CommonStates")]

View File

@@ -1,15 +1,15 @@
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:shvc="using:Snap.Hutao.View.Control">
xmlns:shuxct="using:Snap.Hutao.UI.Xaml.Control.TextBlock">
<Style BasedOn="{StaticResource DefaultRateDeltaTextBlockStyle}" TargetType="shvc:RateDeltaTextBlock"/>
<Style BasedOn="{StaticResource DefaultRateDeltaTextBlockStyle}" TargetType="shuxct:RateDeltaTextBlock"/>
<Style x:Key="DefaultRateDeltaTextBlockStyle" TargetType="shvc:RateDeltaTextBlock">
<Style x:Key="DefaultRateDeltaTextBlockStyle" TargetType="shuxct:RateDeltaTextBlock">
<Setter Property="Foreground" Value="{ThemeResource TextFillColorPrimaryBrush}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="shvc:RateDeltaTextBlock">
<ControlTemplate TargetType="shuxct:RateDeltaTextBlock">
<TextBlock
x:Name="RootTextBlock"
Foreground="{TemplateBinding Foreground}"

View File

@@ -172,11 +172,6 @@
</ContentPresenter.Resources>
</ContentPresenter>
</InfoBarPanel>
<ContentPresenter
Grid.Row="1"
Grid.Column="1"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"/>
<Button
Name="CloseButton"
Grid.Column="2"
@@ -240,6 +235,11 @@
<SymbolIcon Symbol="{StaticResource InfoBarCloseButtonSymbol}"/>
</Viewbox>
</Button>
<ContentPresenter
Grid.Row="1"
Grid.Column="1"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"/>
</Grid>
<VisualStateManager.VisualStateGroups>

View File

@@ -193,15 +193,6 @@
<CompositeTransform x:Name="PivotLayoutElementTranslateTransform"/>
</Grid.RenderTransform>
<ItemsPresenter x:Name="PivotItemPresenter" Grid.Row="1">
<ItemsPresenter.RenderTransform>
<TransformGroup>
<TranslateTransform x:Name="ItemsPresenterTranslateTransform"/>
<CompositeTransform x:Name="ItemsPresenterCompositeTransform"/>
</TransformGroup>
</ItemsPresenter.RenderTransform>
</ItemsPresenter>
<Border
Grid.Row="0"
Margin="16,16,16,0"
@@ -288,6 +279,15 @@
</Grid>
</Border>
<ItemsPresenter x:Name="PivotItemPresenter" Grid.Row="1">
<ItemsPresenter.RenderTransform>
<TransformGroup>
<TranslateTransform x:Name="ItemsPresenterTranslateTransform"/>
<CompositeTransform x:Name="ItemsPresenterCompositeTransform"/>
</TransformGroup>
</ItemsPresenter.RenderTransform>
</ItemsPresenter>
</Grid>
</PivotPanel>
</ScrollViewer>
@@ -566,17 +566,6 @@
<CompositeTransform x:Name="PivotLayoutElementTranslateTransform"/>
</Grid.RenderTransform>
<ItemsPresenter x:Name="PivotItemPresenter" Grid.Row="1">
<ItemsPresenter.RenderTransform>
<TransformGroup>
<TranslateTransform x:Name="ItemsPresenterTranslateTransform"/>
<CompositeTransform x:Name="ItemsPresenterCompositeTransform"/>
</TransformGroup>
</ItemsPresenter.RenderTransform>
</ItemsPresenter>
<Border
Grid.Row="0"
Margin="16,16,16,0"
@@ -663,6 +652,17 @@
</Grid>
</Border>
<ItemsPresenter x:Name="PivotItemPresenter" Grid.Row="1">
<ItemsPresenter.RenderTransform>
<TransformGroup>
<TranslateTransform x:Name="ItemsPresenterTranslateTransform"/>
<CompositeTransform x:Name="ItemsPresenterCompositeTransform"/>
</TransformGroup>
</ItemsPresenter.RenderTransform>
</ItemsPresenter>
</Grid>
</PivotPanel>
</ScrollViewer>

View File

@@ -6,6 +6,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mxi="using:Microsoft.Xaml.Interactivity"
xmlns:shuxb="using:Snap.Hutao.UI.Xaml.Behavior"
xmlns:shuxc="using:Snap.Hutao.UI.Xaml.Control"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
xmlns:shva="using:Snap.Hutao.ViewModel.Achievement"
xmlns:shvc="using:Snap.Hutao.View.Control"
@@ -100,6 +101,6 @@
</StackPanel>
</Grid>
<shvc:LoadingViewSlim IsLoading="{Binding IsInitialized, Converter={StaticResource BoolNegationConverter}}"/>
<shuxc:Loading IsLoading="{Binding IsInitialized, Converter={StaticResource BoolNegationConverter}}" Style="{ThemeResource DefaultLoadingCardStyle}"/>
</Grid>
</Button>

View File

@@ -7,6 +7,7 @@
xmlns:mxi="using:Microsoft.Xaml.Interactivity"
xmlns:shme="using:Snap.Hutao.Model.Entity"
xmlns:shuxb="using:Snap.Hutao.UI.Xaml.Behavior"
xmlns:shuxc="using:Snap.Hutao.UI.Xaml.Control"
xmlns:shuxcc="using:Snap.Hutao.UI.Xaml.Control.Card"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
xmlns:shvc="using:Snap.Hutao.View.Control"
@@ -135,6 +136,6 @@
</StackPanel>
</Grid>
<shvc:LoadingViewSlim IsLoading="{Binding IsInitialized, Converter={StaticResource BoolNegationConverter}}"/>
<shuxc:Loading IsLoading="{Binding IsInitialized, Converter={StaticResource BoolNegationConverter}}" Style="{ThemeResource DefaultLoadingCardStyle}"/>
</Grid>
</Button>

View File

@@ -6,6 +6,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mxi="using:Microsoft.Xaml.Interactivity"
xmlns:shuxb="using:Snap.Hutao.UI.Xaml.Behavior"
xmlns:shuxc="using:Snap.Hutao.UI.Xaml.Control"
xmlns:shuxcc="using:Snap.Hutao.UI.Xaml.Control.Card"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
xmlns:shvc="using:Snap.Hutao.View.Control"
@@ -177,6 +178,6 @@
<TextBlock HorizontalAlignment="Center" Text="{shuxm:ResourceString Name=ViewGachaLogHeader}"/>
</StackPanel>
<shvc:LoadingViewSlim IsLoading="{Binding IsInitialized, Converter={StaticResource BoolNegationConverter}}"/>
<shuxc:Loading IsLoading="{Binding IsInitialized, Converter={StaticResource BoolNegationConverter}}" Style="{ThemeResource DefaultLoadingCardStyle}"/>
</Grid>
</Button>

View File

@@ -4,6 +4,7 @@
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:shuxc="using:Snap.Hutao.UI.Xaml.Control"
xmlns:shuxci="using:Snap.Hutao.UI.Xaml.Control.Image"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
xmlns:shvc="using:Snap.Hutao.View.Control"
@@ -84,7 +85,7 @@
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<shvc:ItemIcon
<shuxc:ItemIcon
Grid.Column="0"
Width="36"
Height="36"
@@ -137,7 +138,7 @@
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<shvc:ItemIcon
<shuxc:ItemIcon
Grid.Column="0"
Width="36"
Height="36"

View File

@@ -6,15 +6,15 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:shux="using:Snap.Hutao.UI.Xaml"
xmlns:shuxc="using:Snap.Hutao.UI.Xaml.Control"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
xmlns:shvc="using:Snap.Hutao.View.Control"
Title="{shuxm:ResourceString Name=ViewDialogGachaLogRefreshProgressTitle}"
Style="{StaticResource DefaultContentDialogStyle}"
mc:Ignorable="d">
<ContentDialog.Resources>
<DataTemplate x:Key="GachaItemDataTemplate">
<shvc:ItemIcon
<shuxc:ItemIcon
shux:FrameworkElementHelper.SquareLength="60"
Badge="{Binding Badge}"
Icon="{Binding Icon}"

View File

@@ -17,6 +17,7 @@
xmlns:shuxci="using:Snap.Hutao.UI.Xaml.Control.Image"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
xmlns:shuxma="using:Snap.Hutao.UI.Xaml.Media.Animation"
xmlns:shuxvw="using:Snap.Hutao.UI.Xaml.View.Window"
xmlns:shvco="using:Snap.Hutao.View.Control"
xmlns:shvh="using:Snap.Hutao.ViewModel.Home"
d:DataContext="{d:DesignInstance shvh:AnnouncementViewModel}"
@@ -126,24 +127,14 @@
</Border>
</Grid>
<!-- 公告详情网页视图 -->
<!--<FlyoutBase.AttachedFlyout>
<Flyout LightDismissOverlayMode="On" Placement="Full">
<Flyout.FlyoutPresenterStyle>
<Style BasedOn="{StaticResource DefaultFlyoutPresenterStyle}" TargetType="FlyoutPresenter">
<Setter Property="Padding" Value="0"/>
<Setter Property="CornerRadius" Value="0"/>
<Setter Property="MaxWidth" Value="640"/>
</Style>
</Flyout.FlyoutPresenterStyle>
<shvco:AnnouncementContentViewer Announcement="{Binding}"/>
</Flyout>
</FlyoutBase.AttachedFlyout>-->
<mxi:Interaction.Behaviors>
<!--<mxic:EventTriggerBehavior EventName="Tapped">
<shuxba:ShowAttachedFlyoutAction/>
</mxic:EventTriggerBehavior>-->
<mxic:EventTriggerBehavior EventName="Tapped">
<shuxba:ShowWebView2WindowAction>
<shuxba:ShowWebView2WindowAction.ContentProvider>
<shuxvw:AnnouncementWebView2ContentProvider Announcement="{Binding}"/>
</shuxba:ShowWebView2WindowAction.ContentProvider>
</shuxba:ShowWebView2WindowAction>
</mxic:EventTriggerBehavior>
<mxic:EventTriggerBehavior EventName="PointerEntered">
<shuxba:StartAnimationActionNoThrow Animation="{Binding ElementName=ImageZoomInAnimation}" TargetObject="{Binding ElementName=ImageZoomBorder}"/>
</mxic:EventTriggerBehavior>

View File

@@ -102,7 +102,7 @@
<shuxcc:VerticalCard Grid.Column="0">
<shuxcc:VerticalCard.Top>
<Grid cw:UIElementExtensions.ClipToBounds="True" CornerRadius="{ThemeResource ControlCornerRadius}">
<shvcont:ItemIcon
<shuxc:ItemIcon
Width="64"
Height="64"
Icon="{Binding Icon}"
@@ -126,7 +126,7 @@
<shuxcc:VerticalCard Grid.Column="1">
<shuxcc:VerticalCard.Top>
<Grid cw:UIElementExtensions.ClipToBounds="True" CornerRadius="{ThemeResource ControlCornerRadius}">
<shvcont:ItemIcon
<shuxc:ItemIcon
Width="64"
Height="64"
Icon="{Binding Weapon.Icon}"
@@ -416,7 +416,7 @@
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<shvcont:ItemIcon
<shuxc:ItemIcon
Grid.Column="0"
Width="32"
Height="32"
@@ -626,7 +626,7 @@
<ColumnDefinition/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<shvcont:ItemIcon
<shuxc:ItemIcon
cw:Effects.Shadow="{ThemeResource CompatCardShadow}"
Icon="{Binding SelectedAvatar.Icon}"
Quality="{Binding SelectedAvatar.Quality}"/>
@@ -672,7 +672,7 @@
BorderBrush="{x:Null}"
BorderThickness="0">
<Button.Content>
<shvcont:ItemIcon Icon="{Binding Icon}" Quality="{Binding Quality}"/>
<shuxc:ItemIcon Icon="{Binding Icon}" Quality="{Binding Quality}"/>
</Button.Content>
<Button.Flyout>
<Flyout Placement="BottomEdgeAlignedLeft">

View File

@@ -62,7 +62,7 @@
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid>
<shvco:ItemIcon
<shuxc:ItemIcon
Width="32"
Height="32"
Icon="{Binding Inner.Icon, Converter={StaticResource ItemIconConverter}}"
@@ -126,7 +126,7 @@
<ColumnDefinition/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<shvco:ItemIcon
<shuxc:ItemIcon
Width="48"
Height="48"
Icon="{Binding Icon}"
@@ -176,7 +176,7 @@
<shuxcc:HorizontalCard>
<shuxcc:HorizontalCard.Left>
<Grid Grid.Column="0">
<shvco:ItemIcon
<shuxc:ItemIcon
Width="40"
Height="40"
Icon="{Binding Inner.Icon, Converter={StaticResource ItemIconConverter}}"
@@ -226,7 +226,7 @@
BorderThickness="0">
<shuxcc:VerticalCard>
<shuxcc:VerticalCard.Top>
<shvco:ItemIcon Icon="{Binding Inner.Icon, Converter={StaticResource ItemIconConverter}}" Quality="{Binding Inner.RankLevel}"/>
<shuxc:ItemIcon Icon="{Binding Inner.Icon, Converter={StaticResource ItemIconConverter}}" Quality="{Binding Inner.RankLevel}"/>
</shuxcc:VerticalCard.Top>
<shuxcc:VerticalCard.Bottom>
<TextBlock Text="{Binding Count, Mode=OneWay}"/>

View File

@@ -140,17 +140,18 @@
IsClickEnabled="True"/>
</StackPanel>
</Grid>
<shvc:LoadingViewSlim
<shuxc:Loading
MinWidth="240"
Margin="-16"
IsLoading="{Binding HutaoCloudViewModel.IsInitialized, Converter={StaticResource BoolNegationConverter}}"/>
IsLoading="{Binding HutaoCloudViewModel.IsInitialized, Converter={StaticResource BoolNegationConverter}}"
Style="{ThemeResource DefaultLoadingCardStyle}"/>
</Grid>
</Flyout>
<DataTemplate x:Key="HistoryWishItemTemplate">
<Border Width="40" Style="{StaticResource BorderCardStyle}">
<StackPanel>
<shvc:ItemIcon
<shuxc:ItemIcon
Width="38"
Height="38"
Icon="{Binding Icon}"
@@ -215,7 +216,7 @@
<DataTemplate x:Key="HistoryWishGridTemplate">
<Grid>
<shvc:ItemIcon
<shuxc:ItemIcon
Badge="{Binding Badge}"
Icon="{Binding Icon}"
Opacity="{Binding Count, Converter={StaticResource DoubleToOpacityConverter}}"
@@ -476,10 +477,11 @@
</PivotItem>
<PivotItem Header="{shuxm:ResourceString Name=ViewPageGahcaLogPivotStatistics}">
<Grid>
<shvc:LoadingView
<shuxc:Loading
Margin="16"
CornerRadius="{ThemeResource ControlCornerRadius}"
IsLoading="{Binding HutaoCloudStatisticsViewModel.IsInitialized, Converter={StaticResource BoolNegationConverter}}"/>
IsLoading="{Binding HutaoCloudStatisticsViewModel.IsInitialized, Converter={StaticResource BoolNegationConverter}}"
Style="{ThemeResource DefaultLoadingViewStyle}"/>
<shuxcp:HorizontalEqualPanel
Margin="16"
Spacing="16"

View File

@@ -395,7 +395,7 @@
ItemsSource="{Binding GamePackage.Main.Patches, Mode=OneWay}"/>
</StackPanel>
</ScrollViewer>
<shvc:LoadingView IsLoading="{Binding GamePackage, Converter={StaticResource EmptyObjectToBoolRevertConverter}}"/>
<shuxc:Loading IsLoading="{Binding GamePackage, Converter={StaticResource EmptyObjectToBoolRevertConverter}}" Style="{ThemeResource DefaultLoadingViewStyle}"/>
</Grid>
</PivotItem>
</Pivot>

View File

@@ -88,7 +88,7 @@
</StackPanel>
</ToolTipService.ToolTip>
<Grid Height="40" CornerRadius="20">
<shvcon:ItemIcon
<shuxc:ItemIcon
Width="40"
Height="40"
Icon="{Binding Icon}"/>
@@ -138,7 +138,7 @@
</DataTemplate>
<DataTemplate x:Key="AvatarTemplate" x:DataType="shvs:AvatarView">
<shvcon:ItemIcon
<shuxc:ItemIcon
Width="60"
Height="60"
Margin="0,0,8,8"
@@ -469,7 +469,7 @@
<DataTemplate>
<shuxcc:VerticalCard>
<shuxcc:VerticalCard.Top>
<shvcon:ItemIcon
<shuxc:ItemIcon
Width="52"
Height="52"
Icon="{Binding Icon}"
@@ -511,7 +511,7 @@
<Grid.Resources>
<DataTemplate x:Key="AvatarViewInTeamTemplate" d:DataType="shvcom:AvatarView">
<shvcon:ItemIcon
<shuxc:ItemIcon
Width="40"
Height="40"
shux:UIElementHelper.OpacityObject="{Binding Icon}"
@@ -569,7 +569,7 @@
<DataTemplate x:Key="RatedAvatarTemplate" x:DataType="shvcom:AvatarView">
<shuxcc:HorizontalCard>
<shuxcc:HorizontalCard.Left>
<shvcon:ItemIcon
<shuxc:ItemIcon
Width="56"
Height="56"
Icon="{Binding Icon}"
@@ -582,7 +582,7 @@
HorizontalAlignment="Center"
Spacing="2">
<TextBlock HorizontalAlignment="Center" Text="{Binding Rate}"/>
<shvcon:RateDeltaTextBlock
<shuxct:RateDeltaTextBlock
HorizontalAlignment="Center"
Text="{Binding RateDelta}"
TextStyle="{StaticResource CaptionTextBlockStyle}"/>
@@ -881,7 +881,7 @@
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<shvcon:ItemIcon
<shuxc:ItemIcon
Width="48"
Height="48"
Icon="{Binding Icon}"
@@ -894,7 +894,7 @@
</Grid.ColumnDefinitions>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock HorizontalAlignment="Center" Text="{Binding Rate}"/>
<shvcon:RateDeltaTextBlock
<shuxct:RateDeltaTextBlock
HorizontalAlignment="Center"
Text="{Binding RateDelta}"
TextStyle="{StaticResource CaptionTextBlockStyle}"/>
@@ -910,7 +910,7 @@
<DataTemplate>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock HorizontalAlignment="Center" Text="{Binding Rate}"/>
<shvcon:RateDeltaTextBlock
<shuxct:RateDeltaTextBlock
HorizontalAlignment="Center"
Text="{Binding RateDelta}"
TextStyle="{StaticResource CaptionTextBlockStyle}"/>
@@ -929,10 +929,11 @@
</PivotItem>
</Pivot>
<shvcon:LoadingView
<shuxc:Loading
Margin="16"
CornerRadius="{ThemeResource ControlCornerRadius}"
IsLoading="{Binding Overview, Converter={StaticResource EmptyObjectToBoolRevertConverter}}"/>
IsLoading="{Binding Overview, Converter={StaticResource EmptyObjectToBoolRevertConverter}}"
Style="{ThemeResource DefaultLoadingViewStyle}"/>
</Grid>
</PivotItem>
</Pivot>

View File

@@ -135,7 +135,7 @@
<DataTemplate x:Key="CultivationItemTemplate">
<shuxcc:HorizontalCard>
<shuxcc:HorizontalCard.Left>
<shvcont:ItemIcon
<shuxc:ItemIcon
Width="40"
Height="40"
Icon="{Binding Icon, Converter={StaticResource ItemIconConverter}}"
@@ -153,7 +153,7 @@
<DataTemplate x:Key="CollocationTemplate">
<shuxcc:HorizontalCard>
<shuxcc:HorizontalCard.Left>
<shvcont:ItemIcon
<shuxc:ItemIcon
Width="48"
Height="48"
Icon="{Binding Icon}"
@@ -167,7 +167,7 @@
Opacity="0.7"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{Binding Rate}"/>
<shvcont:RateDeltaTextBlock
<shuxct:RateDeltaTextBlock
Opacity="0.7"
Text="{Binding RateDelta}"
TextStyle="{StaticResource CaptionTextBlockStyle}"/>
@@ -186,7 +186,7 @@
<x:Int32>0</x:Int32>
</cwc:Case.Value>
<Grid>
<shvcont:ItemIcon
<shuxc:ItemIcon
Width="48"
Height="48"
Icon="{StaticResource UI_ItemIcon_None}"
@@ -198,7 +198,7 @@
<x:Int32>1</x:Int32>
</cwc:Case.Value>
<Grid>
<shvcont:ItemIcon
<shuxc:ItemIcon
Width="48"
Height="48"
Icon="{Binding Icons[0]}"
@@ -210,7 +210,7 @@
<x:Int32>2</x:Int32>
</cwc:Case.Value>
<Grid>
<shvcont:ItemIcon
<shuxc:ItemIcon
Width="48"
Height="48"
Quality="QUALITY_ORANGE"/>
@@ -241,7 +241,7 @@
Opacity="0.7"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{Binding Rate}"/>
<shvcont:RateDeltaTextBlock
<shuxct:RateDeltaTextBlock
Opacity="0.7"
Text="{Binding RateDelta}"
TextStyle="{StaticResource CaptionTextBlockStyle}"/>
@@ -291,7 +291,7 @@
<DataTemplate x:Key="AvatarGridTemplate">
<shuxcc:VerticalCard>
<shuxcc:VerticalCard.Top>
<shvcont:ItemIcon Icon="{Binding Icon, Converter={StaticResource AvatarIconConverter}, Mode=OneWay}" Quality="{Binding Quality}"/>
<shuxc:ItemIcon Icon="{Binding Icon, Converter={StaticResource AvatarIconConverter}, Mode=OneWay}" Quality="{Binding Quality}"/>
</shuxcc:VerticalCard.Top>
<shuxcc:VerticalCard.Bottom>
<TextBlock Text="{Binding Name}"/>
@@ -426,7 +426,7 @@
Height="32"
Source="{Binding Selected.Weapon, Converter={StaticResource WeaponTypeIconConverter}}"/>
</Grid>
<shvcont:ItemIcon
<shuxc:ItemIcon
Width="128"
Height="128"
Icon="{Binding Selected.Icon, Converter={StaticResource AvatarIconConverter}, Mode=OneWay}"
@@ -586,28 +586,28 @@
Grid.Column="0"
Style="{StaticResource BaseTextBlockStyle}"
Text="{shuxm:ResourceString Name=ViewPageWiKiAvatarTeamCombinationHeader}"/>
<TextBlock
Grid.Row="0"
Grid.Column="1"
Style="{StaticResource BaseTextBlockStyle}"
Text="{shuxm:ResourceString Name=ViewPageWiKiAvatarWeaponCombinationHeader}"/>
<TextBlock
Grid.Row="0"
Grid.Column="2"
Style="{StaticResource BaseTextBlockStyle}"
Text="{shuxm:ResourceString Name=ViewPageWiKiAvatarArtifactSetCombinationHeader}"/>
<ItemsControl
Grid.Row="1"
Grid.Column="0"
ItemTemplate="{StaticResource CollocationTemplate}"
ItemsPanel="{StaticResource StackPanelSpacing4Template}"
ItemsSource="{Binding Selected.CollocationView.Avatars}"/>
<TextBlock
Grid.Row="0"
Grid.Column="1"
Style="{StaticResource BaseTextBlockStyle}"
Text="{shuxm:ResourceString Name=ViewPageWiKiAvatarWeaponCombinationHeader}"/>
<ItemsControl
Grid.Row="1"
Grid.Column="1"
ItemTemplate="{StaticResource CollocationTemplate}"
ItemsPanel="{StaticResource StackPanelSpacing4Template}"
ItemsSource="{Binding Selected.CollocationView.Weapons}"/>
<TextBlock
Grid.Row="0"
Grid.Column="2"
Style="{StaticResource BaseTextBlockStyle}"
Text="{shuxm:ResourceString Name=ViewPageWiKiAvatarArtifactSetCombinationHeader}"/>
<ItemsControl
Grid.Row="1"
Grid.Column="2"
@@ -665,33 +665,11 @@
Grid.Column="0"
Style="{StaticResource BaseTextBlockStyle}"
Text="{shuxm:ResourceString Name=ViewPageWiKiAvatarSpecialFoodTitle}"/>
<shuxcc:VerticalCard
Grid.Row="1"
Grid.Column="0"
Margin="0,16,0,0">
<shuxcc:VerticalCard.Top>
<shvcont:ItemIcon Icon="{Binding Item.Icon, Converter={StaticResource ItemIconConverter}}" Quality="{Binding Item.RankLevel}"/>
</shuxcc:VerticalCard.Top>
<shuxcc:VerticalCard.Bottom>
<TextBlock Text="{Binding Item.Name}"/>
</shuxcc:VerticalCard.Bottom>
</shuxcc:VerticalCard>
<TextBlock
Grid.Column="1"
Margin="16,0,0,0"
Style="{StaticResource BaseTextBlockStyle}"
Text="{shuxm:ResourceString Name=ViewPageWiKiAvatarOriginalFoodTitle}"/>
<shuxcc:VerticalCard
Grid.Row="1"
Grid.Column="1"
Margin="16,16,0,0">
<shuxcc:VerticalCard.Top>
<shvcont:ItemIcon Icon="{Binding OriginItem.Icon, Converter={StaticResource ItemIconConverter}}" Quality="{Binding OriginItem.RankLevel}"/>
</shuxcc:VerticalCard.Top>
<shuxcc:VerticalCard.Bottom>
<TextBlock Text="{Binding OriginItem.Name}"/>
</shuxcc:VerticalCard.Bottom>
</shuxcc:VerticalCard>
<StackPanel
Grid.RowSpan="4"
Grid.Column="2"
@@ -708,6 +686,28 @@
Text="{Binding Item.EffectDescription}"
TextWrapping="Wrap"/>
</StackPanel>
<shuxcc:VerticalCard
Grid.Row="1"
Grid.Column="0"
Margin="0,16,0,0">
<shuxcc:VerticalCard.Top>
<shuxc:ItemIcon Icon="{Binding Item.Icon, Converter={StaticResource ItemIconConverter}}" Quality="{Binding Item.RankLevel}"/>
</shuxcc:VerticalCard.Top>
<shuxcc:VerticalCard.Bottom>
<TextBlock Text="{Binding Item.Name}"/>
</shuxcc:VerticalCard.Bottom>
</shuxcc:VerticalCard>
<shuxcc:VerticalCard
Grid.Row="1"
Grid.Column="1"
Margin="16,16,0,0">
<shuxcc:VerticalCard.Top>
<shuxc:ItemIcon Icon="{Binding OriginItem.Icon, Converter={StaticResource ItemIconConverter}}" Quality="{Binding OriginItem.RankLevel}"/>
</shuxcc:VerticalCard.Top>
<shuxcc:VerticalCard.Bottom>
<TextBlock Text="{Binding OriginItem.Name}"/>
</shuxcc:VerticalCard.Bottom>
</shuxcc:VerticalCard>
</Grid>
</Expander>
</Border>
@@ -807,6 +807,6 @@
</cwc:Case>
</cwc:SwitchPresenter>
</Grid>
<shvcont:LoadingView IsLoading="{Binding Avatars, Converter={StaticResource EmptyObjectToBoolRevertConverter}}"/>
<shuxc:Loading IsLoading="{Binding Avatars, Converter={StaticResource EmptyObjectToBoolRevertConverter}}" Style="{ThemeResource DefaultLoadingViewStyle}"/>
</Grid>
</shuxc:ScopedPage>

View File

@@ -59,7 +59,7 @@
<DataTemplate x:Key="MonsterDropTemplate">
<shuxcc:HorizontalCard>
<shuxcc:HorizontalCard.Left>
<shvc:ItemIcon
<shuxc:ItemIcon
Width="40"
Height="40"
Icon="{Binding Icon, Converter={StaticResource ItemIconConverter}}"
@@ -77,7 +77,7 @@
<DataTemplate x:Key="MonsterGridTemplate">
<shuxcc:VerticalCard>
<shuxcc:VerticalCard.Top>
<shvc:ItemIcon Icon="{Binding Icon, Converter={StaticResource MonsterIconConverter}, Mode=OneWay}" Quality="QUALITY_NONE"/>
<shuxc:ItemIcon Icon="{Binding Icon, Converter={StaticResource MonsterIconConverter}, Mode=OneWay}" Quality="QUALITY_NONE"/>
</shuxcc:VerticalCard.Top>
<shuxcc:VerticalCard.Bottom>
<TextBlock Text="{Binding Name}"/>
@@ -218,6 +218,6 @@
</cwc:Case>
</cwc:SwitchPresenter>
</Grid>
<shvc:LoadingView IsLoading="{Binding Monsters, Converter={StaticResource EmptyObjectToBoolRevertConverter}}"/>
<shuxc:Loading Style="{ThemeResource DefaultLoadingViewStyle}" IsLoading="{Binding Monsters, Converter={StaticResource EmptyObjectToBoolRevertConverter}}"/>
</Grid>
</shuxc:ScopedPage>

View File

@@ -94,7 +94,7 @@
<DataTemplate x:Key="CultivateItemTemplate">
<shuxcc:HorizontalCard>
<shuxcc:HorizontalCard.Left>
<shvc:ItemIcon
<shuxc:ItemIcon
Width="40"
Height="40"
Icon="{Binding Icon, Converter={StaticResource ItemIconConverter}}"
@@ -126,7 +126,7 @@
<DataTemplate x:Key="CollocationTemplate">
<shuxcc:HorizontalCard>
<shuxcc:HorizontalCard.Left>
<shvc:ItemIcon
<shuxc:ItemIcon
Width="48"
Height="48"
Icon="{Binding Icon}"
@@ -140,7 +140,7 @@
Opacity="0.7"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{Binding Rate}"/>
<shvc:RateDeltaTextBlock
<shuxct:RateDeltaTextBlock
Opacity="0.7"
Text="{Binding RateDelta}"
TextStyle="{StaticResource CaptionTextBlockStyle}"/>
@@ -153,7 +153,7 @@
<DataTemplate x:Key="WeaponGridTemplate">
<shuxcc:VerticalCard>
<shuxcc:VerticalCard.Top>
<shvc:ItemIcon Icon="{Binding Icon, Converter={StaticResource EquipIconConverter}, Mode=OneWay}" Quality="{Binding Quality}"/>
<shuxc:ItemIcon Icon="{Binding Icon, Converter={StaticResource EquipIconConverter}, Mode=OneWay}" Quality="{Binding Quality}"/>
</shuxcc:VerticalCard.Top>
<shuxcc:VerticalCard.Bottom>
<TextBlock Text="{Binding Name}"/>
@@ -268,29 +268,6 @@
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border Grid.ColumnSpan="2" Background="{ThemeResource DarkOnlyOverlayMaskColorBrush}"/>
<ScrollViewer
Grid.Column="0"
Margin="16"
VerticalScrollBarVisibility="Hidden">
<StackPanel Spacing="16">
<shuxcc:VerticalCard MaxWidth="80">
<shuxcc:VerticalCard.Top>
<shvc:ItemIcon Icon="{Binding Selected.Icon, Converter={StaticResource EquipIconConverter}}" Quality="{Binding Selected.RankLevel}"/>
</shuxcc:VerticalCard.Top>
<shuxcc:VerticalCard.Bottom>
<TextBlock Text="{shuxm:ResourceString Name=ViewPageWiKiWeaponBeforeAscensionTitle}"/>
</shuxcc:VerticalCard.Bottom>
</shuxcc:VerticalCard>
<shuxcc:VerticalCard MaxWidth="80">
<shuxcc:VerticalCard.Top>
<shvc:ItemIcon Icon="{Binding Selected.AwakenIcon, Converter={StaticResource EquipIconConverter}}" Quality="{Binding Selected.RankLevel}"/>
</shuxcc:VerticalCard.Top>
<shuxcc:VerticalCard.Bottom>
<TextBlock Text="{shuxm:ResourceString Name=ViewPageWiKiWeaponAfterAscensionTitle}"/>
</shuxcc:VerticalCard.Bottom>
</shuxcc:VerticalCard>
</StackPanel>
</ScrollViewer>
<Grid Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
@@ -303,6 +280,29 @@
VerticalAlignment="Stretch"
Source="{Binding Selected.Icon, Converter={StaticResource GachaEquipIconConverter}}"/>
</Grid>
<ScrollViewer
Grid.Column="0"
Margin="16"
VerticalScrollBarVisibility="Hidden">
<StackPanel Spacing="16">
<shuxcc:VerticalCard MaxWidth="80">
<shuxcc:VerticalCard.Top>
<shuxc:ItemIcon Icon="{Binding Selected.Icon, Converter={StaticResource EquipIconConverter}}" Quality="{Binding Selected.RankLevel}"/>
</shuxcc:VerticalCard.Top>
<shuxcc:VerticalCard.Bottom>
<TextBlock Text="{shuxm:ResourceString Name=ViewPageWiKiWeaponBeforeAscensionTitle}"/>
</shuxcc:VerticalCard.Bottom>
</shuxcc:VerticalCard>
<shuxcc:VerticalCard MaxWidth="80">
<shuxcc:VerticalCard.Top>
<shuxc:ItemIcon Icon="{Binding Selected.AwakenIcon, Converter={StaticResource EquipIconConverter}}" Quality="{Binding Selected.RankLevel}"/>
</shuxcc:VerticalCard.Top>
<shuxcc:VerticalCard.Bottom>
<TextBlock Text="{shuxm:ResourceString Name=ViewPageWiKiWeaponAfterAscensionTitle}"/>
</shuxcc:VerticalCard.Bottom>
</shuxcc:VerticalCard>
</StackPanel>
</ScrollViewer>
<TextBlock
Grid.Column="1"
Margin="16"
@@ -414,6 +414,6 @@
</cwc:SwitchPresenter>
</Grid>
<shvc:LoadingView IsLoading="{Binding Weapons, Converter={StaticResource EmptyObjectToBoolRevertConverter}}"/>
<shuxc:Loading IsLoading="{Binding Weapons, Converter={StaticResource EmptyObjectToBoolRevertConverter}}" Style="{ThemeResource DefaultLoadingViewStyle}"/>
</Grid>
</shuxc:ScopedPage>

View File

@@ -12,7 +12,8 @@ using Windows.System;
namespace Snap.Hutao.UI.Xaml.View.Window;
internal sealed partial class AnnouncementWebView2ContentProvider : IWebView2ContentProvider
[DependencyProperty("Announcement", typeof(Announcement))]
internal sealed partial class AnnouncementWebView2ContentProvider : DependencyObject, IWebView2ContentProvider
{
// support click open browser.
private const string MihoyoSDKDefinition = """
@@ -34,13 +35,6 @@ internal sealed partial class AnnouncementWebView2ContentProvider : IWebView2Con
KeyValuePair.Create("background-color:rgb(244, 244, 245)", "background-color:rgba(11, 11, 10)"),
]);
private readonly Announcement? announcement;
public AnnouncementWebView2ContentProvider(Announcement? announcement)
{
this.announcement = announcement;
}
public ElementTheme ActualTheme { get; set; }
public CoreWebView2? CoreWebView2 { get; set; }
@@ -113,6 +107,7 @@ internal sealed partial class AnnouncementWebView2ContentProvider : IWebView2Con
<html>
<head>
<title>{{announcement.Subtitle}} - {{announcement.Title}}</title>
<style>
body::-webkit-scrollbar {
display: none;
@@ -141,7 +136,7 @@ internal sealed partial class AnnouncementWebView2ContentProvider : IWebView2Con
private void LoadAnnouncement(CoreWebView2 coreWebView2)
{
coreWebView2.NavigateToString(GenerateHtml(announcement, ActualTheme));
coreWebView2.NavigateToString(GenerateHtml(Announcement, ActualTheme));
}
private void OnWebMessageReceived(CoreWebView2 coreWebView2, CoreWebView2WebMessageReceivedEventArgs args)

View File

@@ -8,6 +8,19 @@
mc:Ignorable="d">
<Grid ActualThemeChanged="OnActualThemeChanged">
<WebView2 x:Name="WebView" DefaultBackgroundColor="Transparent"/>
<Grid.RowDefinitions>
<RowDefinition Height="44"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid x:Name="TitleArea">
<TextBlock
x:Name="DocumentTitle"
Margin="12,0,0,0"
VerticalAlignment="Center"/>
</Grid>
<WebView2
x:Name="WebView"
Grid.Row="1"
DefaultBackgroundColor="Transparent"/>
</Grid>
</Window>

View File

@@ -1,23 +1,64 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Microsoft.UI;
using Microsoft.UI.Windowing;
using Microsoft.UI.Xaml;
using Microsoft.Web.WebView2.Core;
using Snap.Hutao.UI.Windowing;
using Snap.Hutao.UI.Windowing.Abstraction;
using Snap.Hutao.Web.WebView2;
using Snap.Hutao.Win32.Foundation;
using Snap.Hutao.Win32.UI.WindowsAndMessaging;
using static Snap.Hutao.Win32.User32;
namespace Snap.Hutao.UI.Xaml.View.Window;
internal sealed partial class WebView2Window : Microsoft.UI.Xaml.Window
[SuppressMessage("", "CA1001")]
internal sealed partial class WebView2Window : Microsoft.UI.Xaml.Window, IXamlWindowExtendContentIntoTitleBar, IXamlWindowClosed
{
private readonly CancellationTokenSource loadCts = new();
private readonly IWebView2ContentProvider contentProvider;
private readonly IServiceScope scope;
private readonly AppWindow parentAppWindow;
private readonly HWND parentHWND;
public WebView2Window(Microsoft.UI.Xaml.Window parentWindow, IWebView2ContentProvider contentProvider)
public WebView2Window(WindowId parentWindowId, IWebView2ContentProvider contentProvider)
{
scope = Ioc.Default.CreateScope();
parentHWND = Win32Interop.GetWindowFromWindowId(parentWindowId);
parentAppWindow = AppWindow.GetFromWindowId(parentWindowId);
SetWindowLongPtrW(this.GetWindowHandle(), WINDOW_LONG_PTR_INDEX.GWLP_HWNDPARENT, parentHWND);
if (AppWindow.Presenter is OverlappedPresenter presenter)
{
presenter.IsModal = true;
}
this.contentProvider = contentProvider;
InitializeComponent();
WebView.Loaded += OnWebViewLoaded;
WebView.Unloaded += OnWebViewUnloaded;
this.InitializeController(scope.ServiceProvider);
}
public FrameworkElement TitleBarAccess { get => TitleArea; }
public new void Activate()
{
EnableWindow(parentHWND, false);
base.Activate();
AppWindow.MoveAndResize(parentAppWindow.GetRect());
}
public void OnWindowClosed()
{
EnableWindow(parentHWND, true);
SetForegroundWindow(parentHWND);
scope.Dispose();
}
private void OnWebViewLoaded(object sender, RoutedEventArgs e)
@@ -27,6 +68,7 @@ internal sealed partial class WebView2Window : Microsoft.UI.Xaml.Window
async ValueTask OnWebViewLoadedAsync()
{
await WebView.EnsureCoreWebView2Async();
WebView.CoreWebView2.DocumentTitleChanged += OnDocumentTitleChanged;
WebView.CoreWebView2.DisableDevToolsForReleaseBuild();
contentProvider.CoreWebView2 = WebView.CoreWebView2;
await contentProvider.LoadAsync(loadCts.Token).ConfigureAwait(false);
@@ -43,6 +85,11 @@ internal sealed partial class WebView2Window : Microsoft.UI.Xaml.Window
WebView.Unloaded -= OnWebViewUnloaded;
}
private void OnDocumentTitleChanged(CoreWebView2 sender, object args)
{
DocumentTitle.Text = sender.DocumentTitle;
}
private void OnActualThemeChanged(FrameworkElement sender, object args)
{
contentProvider.ActualTheme = sender.ActualTheme;

View File

@@ -7,6 +7,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:shux="using:Snap.Hutao.UI.Xaml"
xmlns:shuxc="using:Snap.Hutao.UI.Xaml.Control"
xmlns:shuxcc="using:Snap.Hutao.UI.Xaml.Control.Card"
xmlns:shuxci="using:Snap.Hutao.UI.Xaml.Control.Image"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
@@ -20,7 +21,7 @@
<DataTemplate x:Key="GridTemplate" d:DataType="shvg:StatisticsItem">
<shuxcc:VerticalCard>
<shuxcc:VerticalCard.Top>
<shvcont:ItemIcon
<shuxc:ItemIcon
shux:FrameworkElementHelper.SquareLength="40"
Icon="{Binding Icon}"
Quality="{Binding Quality}"/>

View File

@@ -1,28 +0,0 @@
<UserControl
x:Class="Snap.Hutao.View.Control.ItemIcon"
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:shmmc="using:Snap.Hutao.Model.Metadata.Converter"
xmlns:shux="using:Snap.Hutao.UI.Xaml"
xmlns:shuxci="using:Snap.Hutao.UI.Xaml.Control.Image"
shux:FrameworkElementHelper.SquareLength="80"
mc:Ignorable="d">
<UserControl.Resources>
<shmmc:QualityConverter x:Key="QualityConverter"/>
</UserControl.Resources>
<Grid>
<Grid CornerRadius="{StaticResource ControlCornerRadius}">
<shuxci:CachedImage Source="{x:Bind Quality, Converter={StaticResource QualityConverter}, Mode=OneWay}"/>
<shuxci:CachedImage Source="{StaticResource UI_ImgSign_ItemIcon}"/>
<shuxci:CachedImage Source="{x:Bind Icon, Mode=OneWay}"/>
<shuxci:CachedImage
Margin="2"
HorizontalAlignment="Left"
VerticalAlignment="Top"
shux:FrameworkElementHelper.SquareLength="16"
Source="{x:Bind Badge, Mode=OneWay}"/>
</Grid>
</Grid>
</UserControl>

View File

@@ -1,26 +0,0 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Snap.Hutao.Model.Intrinsic;
namespace Snap.Hutao.View.Control;
/// <summary>
/// 物品图标
/// </summary>
[HighQuality]
[DependencyProperty("Quality", typeof(QualityType), QualityType.QUALITY_NONE)]
[DependencyProperty("Icon", typeof(Uri))]
[DependencyProperty("Badge", typeof(Uri))]
internal sealed partial class ItemIcon : UserControl
{
/// <summary>
/// 构造一个新的物品图标
/// </summary>
public ItemIcon()
{
InitializeComponent();
}
}

View File

@@ -1,30 +0,0 @@
<shuxc:Loading
x:Class="Snap.Hutao.View.Control.LoadingView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:clw="using:CommunityToolkit.Labs.WinUI"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:shuxc="using:Snap.Hutao.UI.Xaml.Control"
xmlns:shuxci="using:Snap.Hutao.UI.Xaml.Control.Image"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
IsHitTestVisible="False"
Style="{StaticResource DefaultLoadingStyle}"
mc:Ignorable="d">
<Grid>
<clw:Shimmer CornerRadius="{x:Bind CornerRadius}" IsActive="{x:Bind IsLoading, Mode=OneWay}"/>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<shuxci:CachedImage
Width="120"
Height="120"
Source="{StaticResource UI_EmotionIcon272}"/>
<TextBlock
Margin="0,16,0,0"
HorizontalAlignment="Center"
Style="{StaticResource SubtitleTextBlockStyle}"
Text="{shuxm:ResourceString Name=ViewControlLoadingText}"/>
</StackPanel>
</Grid>
</shuxc:Loading>

View File

@@ -1,20 +0,0 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.UI.Xaml.Control;
namespace Snap.Hutao.View.Control;
/// <summary>
/// 加载视图
/// </summary>
internal sealed partial class LoadingView : Loading
{
/// <summary>
/// 构造一个新的加载视图
/// </summary>
public LoadingView()
{
InitializeComponent();
}
}

View File

@@ -1,18 +0,0 @@
<shuxc:Loading
x:Class="Snap.Hutao.View.Control.LoadingViewSlim"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:clw="using:CommunityToolkit.Labs.WinUI"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:shuxc="using:Snap.Hutao.UI.Xaml.Control"
Height="{StaticResource HomeAdaptiveCardHeight}"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
Style="{StaticResource DefaultLoadingStyle}"
mc:Ignorable="d">
<clw:Shimmer
CornerRadius="0"
IsActive="{x:Bind IsLoading}"
Duration="0:0:1"/>
</shuxc:Loading>

View File

@@ -1,20 +0,0 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.UI.Xaml.Control;
namespace Snap.Hutao.View.Control;
/// <summary>
/// 简单的加载视图
/// </summary>
internal sealed partial class LoadingViewSlim : Loading
{
/// <summary>
/// 构造一个新的简单的加载视图
/// </summary>
public LoadingViewSlim()
{
InitializeComponent();
}
}

View File

@@ -99,7 +99,7 @@
BottomPadding="0,1"
ToolTipService.ToolTip="{Binding TimeFormatted}">
<shuxcc:VerticalCard.Top>
<shvcont:ItemIcon
<shuxc:ItemIcon
shux:FrameworkElementHelper.SquareLength="40"
Icon="{Binding Icon}"
Quality="{Binding Quality}"/>

View File

@@ -55,6 +55,10 @@ internal static class User32
[SupportedOSPlatform("windows5.0")]
public static extern BOOL DestroyWindow(HWND hWnd);
[DllImport("USER32.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
[SupportedOSPlatform("windows5.0")]
public static extern BOOL EnableWindow([In] HWND hWnd, [In] BOOL bEnable);
[DllImport("USER32.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)]
[SupportedOSPlatform("windows5.0")]
public static unsafe extern BOOL EqualRect(RECT* lprc1, RECT* lprc2);