O Avalonia ui é uma estrutura agradável para a qual você deseja voltar várias vezes. Então, voltemos a ele novamente e vejamos alguns recursos junto com minha caixa de mensagens.

Quem é Avalonia?
Avalonia é uma estrutura de plataforma cruzada que permite desenvolver interfaces gráficas em todas as plataformas relevantes.
Em sua estrutura, é incrivelmente próximo ao wpf: xaml semelhante, ligantes semelhantes. Existe até um
tutorial oficial para desenvolvedores do wpf.
O Avalonia é notável pelo fato de que em cada um dos sistemas se refere às interfaces nativas: Win32, MonoMac, X11 ...
O que apareceu na versão atualizada- Suporte 13 ícones de mensagens diferentes.
- Capacidade de copiar o corpo da mensagem usando a combinação de teclas Cntrl + C.
- Ajustando o tamanho da janela ao seu conteúdo.
- Um sistema de estilo simplificado que permite que aqueles que desejam ingressar facilmente no desenvolvimento e suporte de novos.
- Substituindo TextBlock por TextBox, agora o texto na janela pode ser selecionado.
- A arquitetura em si foi completamente redesenhada.

A documentação pode ser encontrada no
gitlab .
O pacote em si pode ser baixado do
nuget .
Vamos falar sobre os recursos e chips avalonia
Obviamente, se houver comparações, será comparado com o wpf.
A primeira coisa que chama sua atenção após as estruturas do ms é a capacidade de vincular comandos aos métodos. Sim, funcionalmente, isso oferece menos oportunidades, mas, em resposta, simplifica a abordagem para o desenvolvimento de um modelo de visualização.
<Button Command="{Binding RunTheThing}" CommandParameter="Hello World"> Do the thing! </Button>
public void RunTheThing(string parameter) {
O Avalonia também é construído usando extensões reativas, o que permite trabalhar com eventos da estrutura como objetos da primeira classe usando a sintaxe declarativa das consultas LINQ - permitindo escrever código conciso e legível.
Mas, indo um pouco mais fundo, tudo fica menos óbvio e a documentação ainda não foi trazida à mente (mas você pode ajudar).
Encadernação à imagem
O problema que encontrei quase imediatamente ao atualizar meu projeto foi como exibir imagens na minha janela.
Antes de tudo, é necessário registrar um diretório com imagens como um recurso do Avalonia, porque é importante que qualquer usuário exiba os ícones e os empacote convenientemente com todo o código.
<ItemGroup> ... <AvaloniaResource Include="Assets\*" /> </ItemGroup>
Agora, na etiqueta da imagem, você pode definir facilmente a imagem selecionada.
<Image Source="/Assets/error.ico" />
Porém, ao usar o vm Source, as imagens não podem ser simplesmente anexadas a uma sequência, mas o Bitmap deve ser usado.
<Image Source="{Binding ImagePath}" />
public Bitmap ImagePath { get; private set; }
E, portanto, agora precisamos extrair nossa imagem dos recursos. Por que usar o localizador Avalonia?
ImagePath = new Bitmap(AvaloniaLocator.Current.GetService<IAssetLoader>() .Open(new Uri($" avares://ASSEMBLYNAME/relative/project/path/{ImageName}.ico")));
Vale notar que, para recursos incorporados ao compilar uri, o prefixo
resm: // é usado e para avalonia -
avares: // .
Desenhando
As formas em avalonia e wpf são semelhantes, mas as propriedades públicas são diferentes. Portanto, baixando imagens svg e convertendo-as usando mskam para ms xaml, elas não puderam ser usadas imediatamente.
Figura personalizada
<PathGeometry Figures="M30 53 C15.641 53 4 41.359 4 27S15.641 1 30 1s26 11.641 26 26c0 7.135-2.874 13.599-7.528 18.297" FillRule="NonZero"/>
Se transforma em:
<GeometryDrawing Brush="#FF50C8EF" Geometry="M30 53 C15.641 53 4 41.359 4 27S15.641 1 30 1s26 11.641 26 26c0 7.135-2.874 13.599-7.528 18.297" />
Uma linha:
<Line X1="25" Y1="37" X2="25" Y2="39" StrokeThickness="2" Stroke="#FFFFFFFF" StrokeMiterLimit="10" StrokeStartLineCap="Round" StrokeEndLineCap="Round"/>
Se transforma em:
<Line StartPoint="25,37" EndPoint="25,39" StrokeThickness="2" Stroke="#FFFFFFFF" StrokeStartLineCap="Round" StrokeEndLineCap="Round"/>
Estilos
Sobre os estilos propriamente ditos, é dito na
documentação . Vale a pena notar que esses são estilos familiares com um pouco de css. Eu queria mostrar como aplicar o estilo de um arquivo separado. Primeiro, todos os arquivos xaml devem ser recursos de avalonia.
<ItemGroup> <AvaloniaResource Include="**\*.xaml"> <SubType>Designer</SubType> </AvaloniaResource> ..... </ItemGroup>
Em segundo lugar, os estilos são aplicados da mesma maneira que os recursos de imagem usando uri e localizador.
YourControl.Styles.Add(new StyleInclude(new Uri("avares://ASSEMBLYNAME/relative/project/path.xaml")){Source = new Uri("avares://ASSEMBLYNAME/relative/project/path.xaml")});
Nice little things
TextBox tem a propriedade Watermark. Isso permite que você não procure pacotes de terceiros e não bloqueie o TextBlock sobre o TextBox, que pode ser lido em muitos tutoriais do wpf.
<TextBox Watermark="Street address" />
E também todos os binders usam PropertyChanged por padrão para acionar a atualização de uma propriedade relacionada.
Em conclusão
Sugiro a todos que experimentem esse quadro interessante. Obrigado aos usuários de
Artyom Gorchakov e
Nikita Tsukanov .
E lembro que a avalonia tem um apoio acolhedor e surpreendente na
Gitter .