圆角设计更新
This commit is contained in:
lincube
2026-03-30 15:28:51 +08:00
parent f84111e837
commit 148e4c894a
56 changed files with 241 additions and 183 deletions

View File

@@ -62,6 +62,7 @@ dotnet test LanMountainDesktop.slnx -c Debug
### UI
- 主题、资源和视觉语义优先遵守 `docs/VISUAL_SPEC.md``docs/CORNER_RADIUS_SPEC.md`
- **组件圆角**:所有内置与插件组件的根边框必须使用 `{DynamicResource DesignCornerRadiusComponent}` 资源。
- 设置页相关改动通常同时落在 `Views/``ViewModels/``Services/``.trae/specs/`
- UI 启动与窗口生命周期主线在 `Program.cs``App.axaml.cs`
@@ -76,6 +77,7 @@ dotnet test LanMountainDesktop.slnx -c Debug
- 设置持久化和 scope 变化优先检查 `LanMountainDesktop.Settings.Core/`
- 外观、圆角、主题资源优先检查 `LanMountainDesktop.Appearance/` 与专题规范
- **圆角统一**桌面组件Widget必须统一使用动态资源 `DesignCornerRadiusComponent`。严禁在组件根容器使用硬编码数值或非组件级令牌(如 `Xs`, `Md` 等),以确保全局圆角缩放设置能正确应用到所有组件。
## 6. 权威来源

View File

@@ -11,12 +11,13 @@ public static class AppearanceCornerRadiusTokenFactory
var normalizedScale = GlobalAppearanceSettings.NormalizeCornerRadiusScale(scale);
return new AppearanceCornerRadiusTokens(
Radius(6, normalizedScale),
Radius(10, normalizedScale),
Radius(12, normalizedScale),
Radius(14, normalizedScale),
Radius(18, normalizedScale),
Radius(24, normalizedScale),
Radius(30, normalizedScale),
Radius(36, normalizedScale));
Radius(20, normalizedScale),
Radius(28, normalizedScale),
Radius(32, normalizedScale),
Radius(36, normalizedScale),
Radius(18, normalizedScale));
}
private static CornerRadius Radius(double value, double scale)

View File

@@ -9,5 +9,6 @@ public enum PluginCornerRadiusPreset
Md = 4,
Lg = 5,
Xl = 6,
Island = 7
Island = 7,
Component = 8
}

View File

@@ -10,13 +10,14 @@ public sealed record PluginCornerRadiusTokens(
double Md,
double Lg,
double Xl,
double Island)
double Island,
double Component)
{
public double Get(PluginCornerRadiusPreset preset)
{
return preset switch
{
PluginCornerRadiusPreset.Default => Md,
PluginCornerRadiusPreset.Default => Component,
PluginCornerRadiusPreset.Micro => Micro,
PluginCornerRadiusPreset.Xs => Xs,
PluginCornerRadiusPreset.Sm => Sm,
@@ -24,7 +25,8 @@ public sealed record PluginCornerRadiusTokens(
PluginCornerRadiusPreset.Lg => Lg,
PluginCornerRadiusPreset.Xl => Xl,
PluginCornerRadiusPreset.Island => Island,
_ => Md
PluginCornerRadiusPreset.Component => Component,
_ => Component
};
}
@@ -44,6 +46,7 @@ public sealed record PluginCornerRadiusTokens(
tokens.Md.TopLeft,
tokens.Lg.TopLeft,
tokens.Xl.TopLeft,
tokens.Island.TopLeft);
tokens.Island.TopLeft,
tokens.Component.TopLeft);
}
}

View File

@@ -9,4 +9,5 @@ public sealed record AppearanceCornerRadiusTokens(
CornerRadius Md,
CornerRadius Lg,
CornerRadius Xl,
CornerRadius Island);
CornerRadius Island,
CornerRadius Component);

View File

@@ -40,11 +40,11 @@ public sealed class CornerRadiusScaleTests
GlobalCornerRadiusScale: 0d,
CornerRadiusTokens: PluginCornerRadiusTokens.FromShared(new AppearanceCornerRadiusTokens(
new CornerRadius(6),
new CornerRadius(10),
new CornerRadius(12),
new CornerRadius(14),
new CornerRadius(18),
new CornerRadius(24),
new CornerRadius(30),
new CornerRadius(20),
new CornerRadius(28),
new CornerRadius(32),
new CornerRadius(36))),
ThemeVariant: "Unknown"));

View File

@@ -48,11 +48,11 @@ public sealed class DesktopComponentRuntimeRegistrationCornerRadiusTests
GlobalCornerRadiusScale: globalScale,
CornerRadiusTokens: new AppearanceCornerRadiusTokens(
new CornerRadius(6),
new CornerRadius(10),
new CornerRadius(12),
new CornerRadius(14),
new CornerRadius(18),
new CornerRadius(24),
new CornerRadius(30),
new CornerRadius(20),
new CornerRadius(28),
new CornerRadius(32),
new CornerRadius(36)));
}
}

View File

@@ -53,8 +53,8 @@ public sealed class InfoRecommendationHostCornerRadiusTests
var max = descriptor.ResolveCornerRadius(CreateChromeContext(componentId, cellSize, 2.5d));
Assert.Equal(0d, zero, 3);
Assert.Equal(24d, unit, 3);
Assert.Equal(60d, max, 3);
Assert.Equal(28d, unit, 3);
Assert.Equal(70d, max, 3);
Assert.True(zero <= unit && unit <= max);
}

View File

@@ -476,6 +476,7 @@ internal sealed class AppearanceThemeService : IAppearanceThemeService, IDisposa
resources["DesignCornerRadiusLg"] = snapshot.CornerRadiusTokens.Lg;
resources["DesignCornerRadiusXl"] = snapshot.CornerRadiusTokens.Xl;
resources["DesignCornerRadiusIsland"] = snapshot.CornerRadiusTokens.Island;
resources["DesignCornerRadiusComponent"] = snapshot.CornerRadiusTokens.Component;
}
public AppearanceMaterialSurface GetMaterialSurface(MaterialSurfaceRole role)

View File

@@ -18,7 +18,7 @@
<Setter Property="Background" Value="{DynamicResource EditorSelectFieldBackgroundBrush}" />
<Setter Property="BorderBrush" Value="{DynamicResource EditorSelectOutlineBrush}" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="CornerRadius" Value="{DynamicResource DesignCornerRadiusMd}" />
<Setter Property="CornerRadius" Value="{DynamicResource DesignCornerRadiusComponent}" />
<Setter Property="Padding" Value="16,14,12,14" />
<Setter Property="MinHeight" Value="56" />
<Setter Property="FontSize" Value="14" />
@@ -40,7 +40,7 @@
<Setter Property="Background" Value="{DynamicResource EditorSelectFieldBackgroundBrush}" />
<Setter Property="BorderBrush" Value="{DynamicResource EditorSelectOutlineBrush}" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="CornerRadius" Value="{DynamicResource DesignCornerRadiusMd}" />
<Setter Property="CornerRadius" Value="{DynamicResource DesignCornerRadiusComponent}" />
<Setter Property="Padding" Value="16,14,12,14" />
<Setter Property="MinHeight" Value="56" />
<Setter Property="Foreground" Value="{DynamicResource ComponentEditorPrimaryTextBrush}" />

View File

@@ -11,6 +11,7 @@
<CornerRadius x:Key="DesignCornerRadiusSm">14</CornerRadius>
<CornerRadius x:Key="DesignCornerRadiusXs">12</CornerRadius>
<CornerRadius x:Key="DesignCornerRadiusIsland">36</CornerRadius>
<CornerRadius x:Key="DesignCornerRadiusComponent">18</CornerRadius>
</Styles.Resources>
<Style Selector="TextBlock">

View File

@@ -53,7 +53,7 @@
<!-- MD3 Button Styles -->
<Style Selector="Button.component-editor-footer-button">
<Setter Property="CornerRadius" Value="{DynamicResource DesignCornerRadiusMd}" />
<Setter Property="CornerRadius" Value="{DynamicResource DesignCornerRadiusComponent}" />
<Setter Property="Background" Value="{DynamicResource EditorPrimaryBrush}" />
<Setter Property="Foreground" Value="{DynamicResource EditorOnPrimaryBrush}" />
<Setter Property="Height" Value="40" />
@@ -99,7 +99,12 @@
</Grid>
</Border>
<Panel Grid.Row="1">
<Border Grid.Row="1"
Background="{DynamicResource EditorSurfaceContainerBrush}"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Margin="16,0,16,16"
ClipToBounds="True">
<Panel>
<ScrollViewer Classes="component-editor-scroll-host"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto">
@@ -118,7 +123,7 @@
Height="64"
Background="{DynamicResource EditorPrimaryBrush}"
Foreground="{DynamicResource EditorOnPrimaryBrush}"
CornerRadius="{DynamicResource DesignCornerRadiusMd}"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Classes="accent"
Click="OnCloseClick">
<Button.Styles>
@@ -131,5 +136,6 @@
Height="32" />
</Button>
</Panel>
</Border>
</Grid>
</Window>

View File

@@ -87,14 +87,14 @@
<Border Width="240"
Height="220"
Margin="6"
CornerRadius="{DynamicResource DesignCornerRadiusLg}"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="10"
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1">
<Grid RowDefinitions="*,Auto,Auto"
RowSpacing="8">
<Border CornerRadius="{DynamicResource DesignCornerRadiusXs}"
<Border CornerRadius="{DynamicResource DesignCornerRadiusSm}"
Background="{DynamicResource AdaptiveGlassPanelBackgroundBrush}"
BorderThickness="1"
BorderBrush="{DynamicResource AdaptiveGlassPanelBorderBrush}"

View File

@@ -9,7 +9,7 @@
x:Class="LanMountainDesktop.Views.Components.BaiduHotSearchWidget">
<Border x:Name="RootBorder"
CornerRadius="34"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Background="Transparent"
ClipToBounds="True"
BorderThickness="0"
@@ -17,7 +17,7 @@
<Grid>
<Border x:Name="CardBorder"
Background="#FCFCFD"
CornerRadius="34"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
BorderBrush="Transparent"
BorderThickness="0"
Padding="16,14,16,14">

View File

@@ -9,7 +9,7 @@
x:Class="LanMountainDesktop.Views.Components.BilibiliHotSearchWidget">
<Border x:Name="RootBorder"
CornerRadius="34"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Background="Transparent"
ClipToBounds="True"
BorderThickness="0"
@@ -17,7 +17,7 @@
<Grid>
<Border x:Name="CardBorder"
Background="#FCFCFD"
CornerRadius="34"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
BorderBrush="Transparent"
BorderThickness="0"
Padding="16,14,16,14">

View File

@@ -9,10 +9,12 @@
x:Class="LanMountainDesktop.Views.Components.BrowserWidget">
<Border x:Name="RootBorder"
Background="#F4F7FC"
CornerRadius="24"
ClipToBounds="True"
Padding="10">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="0"
ClipToBounds="True">
<Grid RowDefinitions="*,Auto"
RowSpacing="8">
<Border x:Name="WebViewHostBorder"

View File

@@ -2,9 +2,11 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="LanMountainDesktop.Views.Components.ClassScheduleWidget">
<Border x:Name="RootBorder"
ClipToBounds="True"
CornerRadius="28"
BorderThickness="1">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Grid x:Name="LayoutGrid"
RowDefinitions="Auto,*">
<Grid x:Name="HeaderGrid"

View File

@@ -10,7 +10,7 @@
<Border x:Name="RootBorder"
Classes="surface-translucent-panel"
Padding="0"
CornerRadius="24">
CornerRadius="{DynamicResource DesignCornerRadiusComponent}">
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Center"
VerticalAlignment="Center">

View File

@@ -9,7 +9,7 @@
x:Class="LanMountainDesktop.Views.Components.CnrDailyNewsWidget">
<Border x:Name="RootBorder"
CornerRadius="34"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Background="Transparent"
ClipToBounds="True"
BorderThickness="0"
@@ -17,7 +17,7 @@
<Grid>
<Border x:Name="CardBorder"
Background="#FCFCFD"
CornerRadius="34"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
BorderBrush="Transparent"
BorderThickness="0"
Padding="16,14,16,14">

View File

@@ -9,15 +9,15 @@ namespace LanMountainDesktop.Views.Components;
internal static class ComponentChromeCornerRadiusHelper
{
public static double ResolveMainRectangleRadiusValue(ComponentChromeContext? chromeContext = null, double fallback = 24d)
public static double ResolveMainRectangleRadiusValue(ComponentChromeContext? chromeContext = null, double fallback = 18d)
{
if (chromeContext is not null)
{
return Math.Max(0d, chromeContext.CornerRadiusTokens.Lg.TopLeft);
return Math.Max(0d, chromeContext.CornerRadiusTokens.Component.TopLeft);
}
var snapshot = HostAppearanceThemeProvider.GetOrCreate().GetCurrent();
var resolved = snapshot.CornerRadiusTokens.Lg.TopLeft;
var resolved = snapshot.CornerRadiusTokens.Component.TopLeft;
return double.IsFinite(resolved)
? Math.Max(0d, resolved)
: Math.Max(0d, fallback * ResolveScale(chromeContext));

View File

@@ -9,7 +9,7 @@
x:Class="LanMountainDesktop.Views.Components.DailyArtworkWidget">
<Border x:Name="RootBorder"
CornerRadius="34"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
BorderThickness="0"
Background="#D5D5D5">

View File

@@ -9,7 +9,7 @@
x:Class="LanMountainDesktop.Views.Components.DailyPoetryWidget">
<Border x:Name="RootBorder"
CornerRadius="34"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
BorderThickness="0"
Background="#C20A0A"

View File

@@ -9,15 +9,15 @@
x:Class="LanMountainDesktop.Views.Components.DailyWord2x2Widget">
<Border x:Name="RootBorder"
CornerRadius="30"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Background="Transparent"
ClipToBounds="True"
BorderThickness="0"
Padding="0">
<Grid>
<Border x:Name="CardBorder"
Background="#FCFBFA"
CornerRadius="30"
Background="#FCFCFD"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
BorderBrush="Transparent"
BorderThickness="0"
Padding="12,11,12,11"

View File

@@ -10,15 +10,15 @@
x:Class="LanMountainDesktop.Views.Components.DailyWordWidget">
<Border x:Name="RootBorder"
CornerRadius="34"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Background="Transparent"
ClipToBounds="True"
BorderThickness="0"
Padding="0">
<Grid>
<Border x:Name="CardBorder"
Background="#FCFBFA"
CornerRadius="34"
Background="#FCFCFD"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
BorderBrush="Transparent"
BorderThickness="0"
Padding="16,14,16,14">

View File

@@ -8,10 +8,11 @@
x:Class="LanMountainDesktop.Views.Components.DateWidget">
<Border x:Name="RootBorder"
Background="{DynamicResource AdaptiveSurfaceBaseBrush}"
CornerRadius="28"
ClipToBounds="True"
Padding="12">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Viewbox Stretch="Uniform">
<Grid x:Name="LayoutRoot"
Width="460"

View File

@@ -21,10 +21,11 @@
</UserControl.Styles>
<Border x:Name="RootBorder"
CornerRadius="34"
ClipToBounds="True"
Padding="12"
Background="#ECEDEF">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Viewbox Stretch="Uniform">
<Grid x:Name="LayoutRoot"
Width="304"

View File

@@ -8,16 +8,16 @@
x:Class="LanMountainDesktop.Views.Components.ExtendedWeatherWidget">
<Border x:Name="RootBorder"
CornerRadius="28"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
Background="#6B7B8F">
<Grid>
<Border x:Name="BackgroundImageLayer"
CornerRadius="28"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True" />
<Border x:Name="BackgroundMotionLayer"
CornerRadius="28"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
Opacity="0.26"
RenderTransformOrigin="0.5,0.5">

View File

@@ -8,10 +8,11 @@
x:Class="LanMountainDesktop.Views.Components.HolidayCalendarWidget">
<Border x:Name="RootBorder"
Background="#DCE7FA"
CornerRadius="34"
ClipToBounds="True"
Padding="14">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Grid x:Name="LayoutRoot"
RowDefinitions="1.1*,2.3*,0.62*,0.78*,0.95*"
RowSpacing="8">

View File

@@ -9,14 +9,14 @@
x:Class="LanMountainDesktop.Views.Components.HourlyWeatherWidget">
<Border x:Name="RootBorder"
CornerRadius="28"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
Background="#6B7B8F">
<Grid>
<Border x:Name="BackgroundImageLayer" CornerRadius="28" ClipToBounds="True" />
<Border x:Name="BackgroundImageLayer" CornerRadius="{DynamicResource DesignCornerRadiusComponent}" ClipToBounds="True" />
<Border x:Name="BackgroundMotionLayer"
CornerRadius="28"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
Opacity="0.25"
RenderTransformOrigin="0.5,0.5">

View File

@@ -9,7 +9,7 @@
x:Class="LanMountainDesktop.Views.Components.IfengNewsWidget">
<Border x:Name="RootBorder"
CornerRadius="32"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Background="Transparent"
ClipToBounds="True"
BorderThickness="0"
@@ -17,7 +17,7 @@
<Grid>
<Border x:Name="CardBorder"
Background="#FCFCFD"
CornerRadius="32"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
BorderBrush="Transparent"
BorderThickness="0"
Padding="14,14,14,14">

View File

@@ -9,15 +9,15 @@
x:Class="LanMountainDesktop.Views.Components.JuyaNewsWidget">
<Border x:Name="RootBorder"
CornerRadius="24"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Background="Transparent"
ClipToBounds="True"
BorderThickness="0"
Padding="0">
<Grid>
<Border x:Name="CardBorder"
Background="#fefefe"
CornerRadius="24"
Background="#FCFCFD"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
BorderBrush="Transparent"
BorderThickness="0"
Padding="16,14,16,14">

View File

@@ -8,10 +8,11 @@
x:Class="LanMountainDesktop.Views.Components.LunarCalendarWidget">
<Border x:Name="RootBorder"
Background="#EFE6D9"
CornerRadius="30"
ClipToBounds="True"
Padding="16">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Viewbox Stretch="Uniform">
<Grid x:Name="LayoutRoot"
Width="300"

View File

@@ -11,9 +11,8 @@
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="28"
ClipToBounds="True"
Padding="14">
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Viewbox Stretch="Uniform">
<Grid x:Name="LayoutRoot"
Width="280"

View File

@@ -9,14 +9,14 @@
x:Class="LanMountainDesktop.Views.Components.MultiDayWeatherWidget">
<Border x:Name="RootBorder"
CornerRadius="28"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
Background="#6B7B8F">
<Grid>
<Border x:Name="BackgroundImageLayer" CornerRadius="28" ClipToBounds="True" />
<Border x:Name="BackgroundImageLayer" CornerRadius="{DynamicResource DesignCornerRadiusComponent}" ClipToBounds="True" />
<Border x:Name="BackgroundMotionLayer"
CornerRadius="28"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
Opacity="0.25"
RenderTransformOrigin="0.5,0.5">

View File

@@ -66,7 +66,7 @@
</UserControl.Styles>
<Border x:Name="RootBorder"
CornerRadius="30"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
BorderThickness="1"
BorderBrush="#52FFFFFF"
@@ -75,11 +75,11 @@
<Grid>
<Grid IsHitTestVisible="False">
<Border x:Name="DynamicBackgroundBase"
CornerRadius="30"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
Background="#B89E7B" />
<Border x:Name="BackdropCoverHost"
CornerRadius="30"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True">
<Image x:Name="BackdropCoverImage"
IsVisible="False"

View File

@@ -10,11 +10,11 @@
x:Class="LanMountainDesktop.Views.Components.OfficeRecentDocumentsWidget">
<Border x:Name="RootBorder"
CornerRadius="{DynamicResource DesignCornerRadiusLg}"
Background="#2D5A8E"
ClipToBounds="True"
BorderThickness="0"
Padding="0">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Grid>
<Border x:Name="AccentCorner"
Width="140"

View File

@@ -9,7 +9,7 @@
x:Class="LanMountainDesktop.Views.Components.RecordingWidget">
<Border x:Name="RootBorder"
CornerRadius="34"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="0"
ClipToBounds="True"
Background="#ECEFF3"

View File

@@ -9,9 +9,11 @@
x:Class="LanMountainDesktop.Views.Components.RemovableStorageWidget">
<Border x:Name="RootBorder"
CornerRadius="28"
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
Padding="16"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12"
ClipToBounds="True">
<Grid>
<Border x:Name="AccentOrb"

View File

@@ -9,7 +9,7 @@
x:Class="LanMountainDesktop.Views.Components.Stcn24ForumWidget">
<Border x:Name="RootBorder"
CornerRadius="28"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Background="Transparent"
ClipToBounds="True"
BorderThickness="0"
@@ -17,7 +17,7 @@
<Grid>
<Border x:Name="CardBorder"
Background="#FCFCFD"
CornerRadius="28"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
BorderBrush="Transparent"
BorderThickness="0"
Padding="12,12,12,12">

View File

@@ -7,10 +7,11 @@
d:DesignHeight="220"
x:Class="LanMountainDesktop.Views.Components.StudyDeductionReasonsWidget">
<Border x:Name="RootBorder"
Classes="surface-translucent-strong"
CornerRadius="22"
Padding="12,10"
ClipToBounds="True">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Grid x:Name="ContentRootGrid"
RowDefinitions="Auto,*,Auto"
RowSpacing="8">

View File

@@ -10,7 +10,7 @@
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="18"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,10">
<Grid x:Name="LayoutGrid"
ColumnDefinitions="*,Auto"

View File

@@ -7,10 +7,11 @@
d:DesignHeight="220"
x:Class="LanMountainDesktop.Views.Components.StudyInterruptDensityWidget">
<Border x:Name="RootBorder"
Classes="surface-translucent-strong"
CornerRadius="22"
Padding="14,10"
ClipToBounds="True">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Grid x:Name="ContentRootGrid"
RowDefinitions="Auto,*,Auto"
RowSpacing="8">

View File

@@ -8,10 +8,11 @@
d:DesignHeight="320"
x:Class="LanMountainDesktop.Views.Components.StudyNoiseCurveWidget">
<Border x:Name="RootBorder"
Classes="surface-translucent-strong"
CornerRadius="24"
Padding="14,10"
ClipToBounds="True">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Grid RowDefinitions="Auto,*"
RowSpacing="8">
<Grid Grid.Row="0"

View File

@@ -8,10 +8,11 @@
d:DesignHeight="320"
x:Class="LanMountainDesktop.Views.Components.StudyNoiseDistributionWidget">
<Border x:Name="RootBorder"
Classes="surface-translucent-strong"
CornerRadius="24"
Padding="14,10"
ClipToBounds="True">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Grid x:Name="ContentRootGrid"
RowDefinitions="Auto,*"
RowSpacing="8">

View File

@@ -7,10 +7,11 @@
d:DesignHeight="360"
x:Class="LanMountainDesktop.Views.Components.StudyScoreOverviewWidget">
<Border x:Name="RootBorder"
Classes="surface-translucent-strong"
CornerRadius="24"
Padding="16,14"
ClipToBounds="True">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Grid x:Name="ContentRootGrid"
RowDefinitions="Auto,Auto,*,Auto"
RowSpacing="8">

View File

@@ -8,8 +8,10 @@
d:DesignHeight="150"
x:Class="LanMountainDesktop.Views.Components.StudySessionControlWidget">
<Border x:Name="RootBorder"
Classes="surface-translucent-strong"
CornerRadius="18"
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,10"
ClipToBounds="True">
<Grid x:Name="LayoutGrid"

View File

@@ -7,10 +7,11 @@
d:DesignHeight="220"
x:Class="LanMountainDesktop.Views.Components.StudySessionHistoryWidget">
<Border x:Name="RootBorder"
Classes="surface-translucent-strong"
CornerRadius="22"
Padding="12,10"
ClipToBounds="True">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Grid>
<Grid x:Name="ContentRootGrid"
RowDefinitions="Auto,*,Auto"

View File

@@ -8,10 +8,11 @@
x:Class="LanMountainDesktop.Views.Components.TimerWidget">
<Border x:Name="RootBorder"
CornerRadius="34"
ClipToBounds="True"
Padding="14"
Background="#E8EAEE">
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Viewbox Stretch="Uniform">
<Grid x:Name="LayoutRoot"
Width="300"

View File

@@ -8,12 +8,12 @@
x:Class="LanMountainDesktop.Views.Components.WeatherClockWidget">
<Border x:Name="RootBorder"
Background="#FFFFFF"
BorderBrush="#14000000"
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="22"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
Padding="12,8">
Padding="14,12">
<Grid x:Name="ContentGrid"
ColumnDefinitions="*,Auto"
ColumnSpacing="10">

View File

@@ -9,16 +9,16 @@
x:Class="LanMountainDesktop.Views.Components.WeatherWidget">
<Border x:Name="RootBorder"
CornerRadius="30"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
Background="#68A9EC">
Background="#6B7B8F">
<Grid>
<Border x:Name="BackgroundImageLayer"
CornerRadius="30"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True" />
<Border x:Name="BackgroundMotionLayer"
CornerRadius="30"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
Opacity="0.20"
RenderTransformOrigin="0.5,0.5">

View File

@@ -11,10 +11,12 @@
<Grid>
<Border x:Name="RootBorder"
Background="#F1F4F9"
CornerRadius="20"
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
Padding="8">
Padding="12">
<Grid RowDefinitions="*,Auto"
RowSpacing="8">
<Border x:Name="CanvasBorder"

View File

@@ -8,12 +8,11 @@
x:Class="LanMountainDesktop.Views.Components.WorldClockWidget">
<Border x:Name="RootBorder"
Background="#F4F5F7"
BorderBrush="#16000000"
Background="{DynamicResource AdaptiveSurfaceRaisedBrush}"
BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}"
BorderThickness="1"
CornerRadius="26"
ClipToBounds="True"
Padding="10,8">
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
Padding="14,12">
<Grid x:Name="ClockHostGrid"
ColumnDefinitions="*,*,*,*"
ColumnSpacing="8" />

View File

@@ -8,7 +8,7 @@
x:Class="LanMountainDesktop.Views.Components.ZhiJiaoHubWidget">
<Border x:Name="RootBorder"
CornerRadius="{DynamicResource DesignCornerRadiusXs}"
CornerRadius="{DynamicResource DesignCornerRadiusComponent}"
ClipToBounds="True"
BorderThickness="0"
Background="#1A1A1A">

View File

@@ -340,7 +340,7 @@ public sealed class PluginLoader
{
var defaultSnapshot = new PluginAppearanceSnapshot(
GlobalCornerRadiusScale: 1d,
CornerRadiusTokens: new PluginCornerRadiusTokens(6, 10, 14, 18, 24, 30, 36),
CornerRadiusTokens: new PluginCornerRadiusTokens(6, 12, 14, 20, 28, 32, 36, 18),
ThemeVariant: "Unknown");
if (hostServices?.GetService(typeof(IAppearanceThemeService)) is not IAppearanceThemeService appearanceThemeService)

View File

@@ -515,12 +515,34 @@ internal sealed class PluginMarketEmbeddedView : UserControl, IDisposable
Background = isSelected ? SelectedSurfaceBrush : SurfaceBrush,
BorderBrush = isSelected ? SelectedBorderBrush : CardBorderBrush,
BorderThickness = new Thickness(1),
CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusMd", 18),
CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 18),
Padding = new Thickness(14),
Child = layoutGrid
};
}
private Control CreateDetailInfoRow(Control icon, Control infoStack)
{
return new Border
{
Background = SurfaceBrush,
BorderBrush = CardBorderBrush,
BorderThickness = new Thickness(1),
CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 16),
Padding = new Thickness(14, 12),
Child = new Grid
{
ColumnDefinitions = new ColumnDefinitions("Auto,*"),
ColumnSpacing = 12,
Children =
{
icon,
infoStack
}
}
};
}
private void BuildDetailPanel()
{
if (_selectedPlugin is null)
@@ -617,7 +639,7 @@ internal sealed class PluginMarketEmbeddedView : UserControl, IDisposable
Background = SurfaceBrush,
BorderBrush = CardBorderBrush,
BorderThickness = new Thickness(1),
CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusMd", 16),
CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 16),
Padding = new Thickness(16),
Child = new TextBlock
{
@@ -1011,7 +1033,7 @@ internal sealed class PluginMarketEmbeddedView : UserControl, IDisposable
return new Border
{
Background = SurfaceBrush,
CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusMd", 18),
CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 18),
Padding = new Thickness(padding)
};
}
@@ -1021,7 +1043,7 @@ internal sealed class PluginMarketEmbeddedView : UserControl, IDisposable
return new Border
{
Background = SurfaceBrush,
CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusMd", 16),
CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 16),
BorderBrush = CardBorderBrush,
BorderThickness = new Thickness(1),
Padding = new Thickness(18),
@@ -1124,7 +1146,7 @@ internal sealed class PluginMarketEmbeddedView : UserControl, IDisposable
Background = SurfaceBrush,
BorderBrush = CardBorderBrush,
BorderThickness = new Thickness(1),
CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusSm", 14),
CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 14),
Padding = new Thickness(14),
Child = new StackPanel
{
@@ -1154,7 +1176,7 @@ internal sealed class PluginMarketEmbeddedView : UserControl, IDisposable
Background = SurfaceBrush,
BorderBrush = CardBorderBrush,
BorderThickness = new Thickness(1),
CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusSm", 14),
CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 14),
Padding = new Thickness(14),
Child = new StackPanel
{

View File

@@ -10,6 +10,7 @@
- Level 216px小型色块和紧凑控件
- Level 320px普通按钮
- Level 424px输入面板和小型容器
- Component18px桌面组件的标准圆角默认值
- Level 528px普通玻璃面板
- Level 632px强化容器
- Level 736px大容器、窗口、任务栏