Lançamento do kit de ferramentas de interface do usuário .NET entre plataformas AvaloniaUI 0.8

A próxima versão beta do AvaloniaUI .



A versão inclui um grande número de correções, otimizações de desempenho e vários novos recursos. O que há de novo, você pode descobrir por baixo do corte.


Back-end X11 para Linux


Anteriormente, usamos o GTK2 e o GTK3 para desenhar janelas no Linux. Infelizmente, o GTK teve mais problemas do que benefícios e a saída de gráficos geralmente teve que ser feita através do XPutImage a partir de uma conexão separada com o servidor X.
No # 2011 , foi implementado um back-end que trabalha diretamente com a libX11, que, além de corrigir vários bugs e simplificar as janelas, tornou possível implementar o suporte a DPI por monitor , que, por razões ideológicas, o GTK for X11 não fornece superioridade Weyland (existe no Qt for X11).


As caixas de diálogo de arquivo ainda dependem do GTK3, mas o trabalho com elas é organizado de forma que, no futuro, seja possível usar as mesmas caixas de diálogo do Qt e das APIs do portal .


AvaloniaResource


Anteriormente, usamos EmbeddedResource para recursos, o que levou a nomes de recursos no formato `resm: YourAssembly.Dir1.Dir2.file.xaml". Agora implementamos uma tarefa MSBuild que permite que você faça referência a recursos por URL normal, como no WPF / UWP, e os mesmos caminhos relativos em relação ao arquivo XAML atual, por exemplo:


<!--    --> <Image Source="../file.jpg"/> <!--  /root/dir    --> <Image Source="/root/dir/file.jpg"/> <!--  /root/dir  "Assembly.Name" --> <Image Source="avares://Assembly.Name/root/dir/file.jpg"/> 

Para migrar projetos antigos, é necessário substituir o EmbeddedResource por AvaloniaResource , por exemplo:


 <AvaloniaResource Include="**\*.xaml"> <SubType>Designer</SubType> </AvaloniaResource> <AvaloniaResource Include="Assets\*"/> 

Para associar a marcação XAML ao codebehind, o nome do recurso em EmbeddedResource foi previamente mapeado com namespace e nome da classe, o que causou vários inconvenientes quando o local do arquivo de marcação não correspondia ao namespace e ao namespace da classe. Agora, o atributo x:Class é usado para isso, como em todas as estruturas XAML de pessoas saudáveis:


 <UserControl xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="MyApplication.MyUserControl"> 


Tema escuro


# 2078 adicionou um recurso que todo mundo espera há tanto tempo, um tema sombrio.



Nota: as guias à esquerda são estilizadas NÃO pelo tema e não estão incluídas nele.


Melhores opções específicas da plataforma


Alguma refatoração da configuração de opções específicas da plataforma foi realizada . Anteriormente, eu tinha que escrever um calçado tão terrível:


 public static AppBuilder BuildAvaloniaApp() { var builder = AppBuilder.Configure<App>(); if(RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) builder.UseX11(new X11PlatformOptions() {UseGpu = false}); else if(RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) builder.UseAvaloniaNative(anopts => { anopts.UseGpu = false; anopts.MacOptions.ShowInDock = 0; }); else if(RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) builder.UseWin32(false, true); return builder; } 

Agora tudo é breve e bonito


 public static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure<App>() .UsePlatformDetect() .With(new X11PlatformOptions { UseGpu = false }) .With(new AvaloniaNativePlatformOptions { UseGpu = false }) .With(new MacOSPlatformOptions { ShowInDock = false }) .With(new Win32PlatformOptions { UseDeferredRendering = false }); 

Visualização de plug-in atualizada para o Visual Studio


A visualização foi reescrita para usar a transferência de imagens pelo TCP. Anteriormente, tínhamos um conjunto de muletas com a criação de uma janela fora da tela e a inseríamos no estúdio por meio do user32! SetParent. O problema com essa abordagem era que nem sempre funcionava e, quando funcionava, nem sempre era como deveria. Agora a visualização se comporta muito mais estável.


Também no plugin atualizado foram introduzidas melhorias de inteligência


Viewbox


No # 2066 , ViewBox um controle frequentemente solicitado do WPF e UWP: ViewBox .


DropDown renomeado ComboBox


Apesar de ele ainda ser um menu suspenso, não uma caixa de combinação, renomeamos para ser como todos os outros (WPF / UWP). O nome antigo ainda está disponível, mas será removido em algumas versões.


DataGrid


O DataGrid agora é considerado condicionalmente pronto para uso (bem, simplesmente porque já está sendo usado ativamente), transferido para o repositório principal e publicado no pacote Avalonia.Controls.DataGrid .


Para usar, você precisa chamar UseDataGrid ao configurar o aplicativo:


 public static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure<App>() .UsePlatformDetect() .UseDataGrid(); 

e registre seu tema padrão no App.xaml :


 <Application.Styles> <StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml"/> <StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseLight.xaml"/> <StyleInclude Source="resm:Avalonia.Controls.DataGrid.Themes.Default.xaml?assembly=Avalonia.Controls.DataGrid"/> </Application.Styles> 

Seleção múltipla no TreeView


No # 2347 , uma seleção múltipla foi adicionada ao TreeView. Foi o ano 2019.


Suporte aprimorado ao ReactiveUI


Um controle foi adicionado no # 2294
RoutedViewHost .


API de fontes do sistema


Agora você pode obter uma lista de todas as APIs disponíveis no sistema. O ano 2019 continuou.


Muitos bugs corrigidos


Uma lista de (quase) todas as alterações pode ser encontrada aqui .


Quebrando mudanças


Como temos 0 número da versão principal, de acordo com o SemVer, podemos fazer alterações significativas em versões menores. E fazemos tudo da mesma forma, é por isso que ainda é "beta". Uma lista de informações de migração pode ser encontrada aqui .


Como começar a usar


A maneira mais fácil é instalar a extensão do Visual Studio e usar os modelos fornecidos com ela ou usar os modelos para o dotnet new . Exemplos de trabalho com o kit de ferramentas podem ser visualizados
aqui


Por enquanto, tradicionalmente podemos dizer sobre documentação, temos algo como no WPF, o que não é descrito no WPF no site , mas se algo completamente incompreensível aconteceu, então bata no Gitter-chat /


Alguém usa isso?


Não diremos para todos, diremos para aqueles que nos falaram em salas de bate-papo:


Versão multiplataforma do ILSpy


WasabiWallet - carteira Bitcoin compatível com ZeroLink


PokemonBattleEngine - um simulador de batalhas Pokemon



egram.tel - cliente de telegrama


SparkSDR - Rádio definido por software para estações de rádio amadores (?).



RoslynPad é um analógico de código aberto do LinqPad.


Core2D - editor de gráficos


AvalonStudio - IDE para desenvolvimento incorporado


Bem, para desenvolvimento em C # com Avalonia:


Para reabastecer esta lista em seu poder.

Source: https://habr.com/ru/post/pt447152/


All Articles