阅读 137

Avalonia + Netcore + VSCode 把WPF带到Linux下

发现了好东西,把使用方法记个流水账,供将来使用

创建工程

创建个C# Core 工程

dotnet new console -o xamltest
cd xamltest

添加Avalonia包

dotnet add package Avalonia
dotnet add package Avalonia.Desktop
dotnet add package Avalonia.ReactiveUI
# 在linux下运行需要额外添加下面这个包,如果只想在windows下运行可以不用:
dotnet add package SkiaSharp.NativeAssets.Linux

编辑文件(如果没有的文件自己创建)

工程.csproj里面添加一些配置

  
    
    
      %(Filename)
    
    
      Designer
    
    
  

编辑Program.cs

using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Controls.Templates;
using Avalonia.Logging.Serilog;
using Avalonia.Markup.Xaml;
using Avalonia.ReactiveUI;
using ReactiveUI;

namespace xamltest
{
	public class ViewLocator : IDataTemplate
	{
		public bool SupportsRecycling => false;

		public IControl Build(object data)
		{
			var name = data.GetType().FullName.Replace("ViewModel", "View");
			var type = Type.GetType(name);
			return (type != null) ? (Control)Activator.CreateInstance(type) : new TextBlock { Text = "Not Found: " + name };
		}

		public bool Match(object data) => data is ReactiveObject;
	}

	public class App : Application
	{
		public override void Initialize() => AvaloniaXamlLoader.Load(this);

		public override void OnFrameworkInitializationCompleted()
		{
			if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) desktop.MainWindow = new MainWindow { DataContext = new MainWindowViewModel(), };
			base.OnFrameworkInitializationCompleted();
		}
	}
	class Program
	{
		public static void Main(string[] args) => AppBuilder.Configure().UsePlatformDetect().LogToDebug().UseReactiveUI().StartWithClassicDesktopLifetime(args);
	}
}

编辑App.xaml


    
        
    

    
        
        
    

编辑MainWindow.xaml



    
        
    
		
    
		
		

编辑MainWindow.xaml.cs

using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using ReactiveUI;

namespace xamltest
{
	public class MainWindowViewModel : ReactiveObject
	{
		public string Greeting => "Hello World!";
	}

	public class MainWindow : Window
	{
		private void InitializeComponent() => AvaloniaXamlLoader.Load(this);
		public MainWindow()
		{
			InitializeComponent();
		}
	}
}

接下来就能dotnet run运行了.

更多资料


原文:https://www.cnblogs.com/DragonStart/p/13706941.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐