diff --git a/JiLinApp/App.axaml.cs b/JiLinApp/App.axaml.cs index c28cb3c..b447fec 100644 --- a/JiLinApp/App.axaml.cs +++ b/JiLinApp/App.axaml.cs @@ -1,29 +1,26 @@ using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; -using JiLinApp.ViewModels; -using JiLinApp.Views; +using JiLinApp.Pages.Main; -namespace JiLinApp +namespace JiLinApp; + +public partial class App : Application { - public partial class App : Application + public override void Initialize() { - public override void Initialize() - { - AvaloniaXamlLoader.Load(this); - } + AvaloniaXamlLoader.Load(this); + } - public override void OnFrameworkInitializationCompleted() + public override void OnFrameworkInitializationCompleted() + { + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { - if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) + desktop.MainWindow = new MainWindow { - desktop.MainWindow = new MainWindow - { - DataContext = new MainWindowViewModel(), - }; - } - - base.OnFrameworkInitializationCompleted(); + DataContext = new MainWindowViewModel(), + }; } + base.OnFrameworkInitializationCompleted(); } } \ No newline at end of file diff --git a/JiLinApp/Assets/Fonts/msyh.ttf b/JiLinApp/Assets/Fonts/msyh.ttf new file mode 100644 index 0000000..aa23ae1 Binary files /dev/null and b/JiLinApp/Assets/Fonts/msyh.ttf differ diff --git a/JiLinApp/Core/Avalonia/NativeHost.cs b/JiLinApp/Core/Avalonia/NativeHost.cs new file mode 100644 index 0000000..db7f6c0 --- /dev/null +++ b/JiLinApp/Core/Avalonia/NativeHost.cs @@ -0,0 +1,17 @@ +using Avalonia.Controls; +using Avalonia.Platform; +using System; + +namespace JiLinApp.Core.Avalonia; + +public class NativeHost : NativeControlHost +{ + public IntPtr Handle { get; set; } + + protected override IPlatformHandle CreateNativeControlCore(IPlatformHandle parent) + { + IPlatformHandle? pfHandle = base.CreateNativeControlCore(parent); + Handle = pfHandle.Handle; + return pfHandle; + } +} \ No newline at end of file diff --git a/JiLinApp/Core/Avalonia/ViewModelBase.cs b/JiLinApp/Core/Avalonia/ViewModelBase.cs new file mode 100644 index 0000000..845f2d2 --- /dev/null +++ b/JiLinApp/Core/Avalonia/ViewModelBase.cs @@ -0,0 +1,7 @@ +using ReactiveUI; + +namespace JiLinApp.Core.Avalonia; + +public class ViewModelBase : ReactiveObject +{ +} \ No newline at end of file diff --git a/JiLinApp/JiLinApp.csproj b/JiLinApp/JiLinApp.csproj index cfb0749..32b1aad 100644 --- a/JiLinApp/JiLinApp.csproj +++ b/JiLinApp/JiLinApp.csproj @@ -9,7 +9,6 @@ - diff --git a/JiLinApp/Views/MainWindow.axaml b/JiLinApp/Pages/Main/MainWindow.axaml similarity index 89% rename from JiLinApp/Views/MainWindow.axaml rename to JiLinApp/Pages/Main/MainWindow.axaml index d5bd61f..cdedf81 100644 --- a/JiLinApp/Views/MainWindow.axaml +++ b/JiLinApp/Pages/Main/MainWindow.axaml @@ -1,10 +1,10 @@ diff --git a/JiLinApp/Pages/Main/MainWindow.axaml.cs b/JiLinApp/Pages/Main/MainWindow.axaml.cs new file mode 100644 index 0000000..b8ab67b --- /dev/null +++ b/JiLinApp/Pages/Main/MainWindow.axaml.cs @@ -0,0 +1,11 @@ +using Avalonia.Controls; + +namespace JiLinApp.Pages.Main; + +public partial class MainWindow : Window +{ + public MainWindow() + { + InitializeComponent(); + } +} \ No newline at end of file diff --git a/JiLinApp/Pages/Main/MainWindowViewModel.cs b/JiLinApp/Pages/Main/MainWindowViewModel.cs new file mode 100644 index 0000000..3517e91 --- /dev/null +++ b/JiLinApp/Pages/Main/MainWindowViewModel.cs @@ -0,0 +1,8 @@ +using JiLinApp.Core.Avalonia; + +namespace JiLinApp.Pages.Main; + +public class MainWindowViewModel : ViewModelBase +{ + public string Greeting => "Welcome to Avalonia!"; +} \ No newline at end of file diff --git a/JiLinApp/Program.cs b/JiLinApp/Program.cs index 5ea19e6..3a8ee81 100644 --- a/JiLinApp/Program.cs +++ b/JiLinApp/Program.cs @@ -1,24 +1,35 @@ using Avalonia; +using Avalonia.Media; using Avalonia.ReactiveUI; using System; -namespace JiLinApp +namespace JiLinApp; + +internal class Program { - internal class Program - { - // Initialization code. Don't use any Avalonia, third-party APIs or any - // SynchronizationContext-reliant code before AppMain is called: things aren't initialized - // yet and stuff might break. - [STAThread] - public static void Main(string[] args) => BuildAvaloniaApp() - .StartWithClassicDesktopLifetime(args); + // Initialization code. Don't use any Avalonia, third-party APIs or any + // SynchronizationContext-reliant code before AppMain is called: things aren't initialized + // yet and stuff might break. + [STAThread] + public static void Main(string[] args) => BuildAvaloniaApp() + .StartWithClassicDesktopLifetime(args); - // Avalonia configuration, don't remove; also used by visual designer. - public static AppBuilder BuildAvaloniaApp() - => AppBuilder.Configure() - .UsePlatformDetect() - .WithInterFont() - .LogToTrace() - .UseReactiveUI(); - } + // Avalonia configuration, don't remove; also used by visual designer. + public static AppBuilder BuildAvaloniaApp() + => AppBuilder.Configure() + .UsePlatformDetect() + .WithInterFont() + .LogToTrace() + .UseReactiveUI() + .With(new FontManagerOptions + { + DefaultFamilyName = "avares://JiLinApp/Assets/Fonts/msyh.ttf#Microsoft YaHei", + FontFallbacks = new[] + { + new FontFallback + { + FontFamily = new FontFamily("avares://JiLinApp/Assets/Fonts/msyh.ttf#Microsoft YaHei") + } + } + }); } \ No newline at end of file diff --git a/JiLinApp/ViewModels/MainWindowViewModel.cs b/JiLinApp/ViewModels/MainWindowViewModel.cs deleted file mode 100644 index cb7edd0..0000000 --- a/JiLinApp/ViewModels/MainWindowViewModel.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace JiLinApp.ViewModels -{ - public class MainWindowViewModel : ViewModelBase - { - public string Greeting => "Welcome to Avalonia!"; - } -} \ No newline at end of file diff --git a/JiLinApp/ViewModels/ViewModelBase.cs b/JiLinApp/ViewModels/ViewModelBase.cs deleted file mode 100644 index 01c2f50..0000000 --- a/JiLinApp/ViewModels/ViewModelBase.cs +++ /dev/null @@ -1,8 +0,0 @@ -using ReactiveUI; - -namespace JiLinApp.ViewModels -{ - public class ViewModelBase : ReactiveObject - { - } -} \ No newline at end of file diff --git a/JiLinApp/Views/MainWindow.axaml.cs b/JiLinApp/Views/MainWindow.axaml.cs deleted file mode 100644 index 6b3e137..0000000 --- a/JiLinApp/Views/MainWindow.axaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Avalonia.Controls; - -namespace JiLinApp.Views -{ - public partial class MainWindow : Window - { - public MainWindow() - { - InitializeComponent(); - } - } -} \ No newline at end of file