O Avalonia ui é uma estrutura agradável para a qual você deseja retornar novamente. Então, voltemos a ele novamente e vejamos alguns dos recursos da minha caixa de mensagens.

Quem é Avalonia?
Avalonia é uma estrutura multiplataforma que permite desenvolver interfaces gráficas em todas as plataformas atuais.
Em sua estrutura, é incrivelmente próximo do wpf: xaml semelhante, ligação semelhante. Existe até um
tutorial oficial para desenvolvedores do wpf.
O Avaloniya também se destaca pelo fato de que em cada um dos sistemas ele acessa suas interfaces nativas: Win32, MonoMac, X11 ...
O que apareceu na versão atualizada- Suporte para 13 ícones de mensagens diferentes.
- Capacidade de copiar o corpo da mensagem usando a combinação de teclas Cntrl + C.
- Ajuste o tamanho da janela ao seu conteúdo.
- Um sistema de estilo simplificado que permite que qualquer pessoa se envolva 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
Obviamente, se houver comparações, ela será comparada 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, 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 Avaloniya também é construído usando extensões reativas, que permitem trabalhar com eventos de estrutura como com objetos de primeira classe usando a sintaxe de consulta declarativa LINQ - permitindo escrever um código conciso e legível.
Mas, indo um pouco mais fundo, tudo fica menos óbvio e a documentação ainda não foi lembrada (mas você pode ajudar).
Encadernação à imagem
O problema que encontrei quase imediatamente ao atualizar meu projeto foi como exibir imagens na minha janela.
Primeiro, você precisa registrar um diretório com imagens como um recurso de avalonia, porque é importante que os ícones sejam exibidos em qualquer usuário e convenientemente compactados com todo o código.
<ItemGroup> ... <AvaloniaResource Include = "Assets \ *" /> </ ItemGroup>
Agora você pode definir facilmente a imagem selecionada na etiqueta da imagem.
<Image Source = "/ Assets / error.ico" />
Porém, ao usar o vm Source, as imagens não podem simplesmente ser canalizadas para a string, mas você deve usar o Bitmap.
<Image Source = "{Binding ImagePath}" />
public Bitmap ImagePath {get; private set; }
E, portanto, agora precisamos extrair nossa imagem dos recursos. O que você precisa para usar o localizador avalonia.
ImagePath = new Bitmap (AvaloniaLocator.Current.GetService <IAssetLoader> () .Open (new Uri ($ "avares: // ASSEMBLYNAME / relative / project / path / {ImageName} .ico")));
Deve-se notar que, para recursos incorporados ao compilar uri, o prefixo
resm: // é usado e para avalonia -
avares: // .
Desenhando
Os números em avalonia e wpf são semelhantes, mas as propriedades públicas são diferentes. Portanto, depois de baixar imagens svg e convertê-las em ms xaml usando inskape, elas não puderam ser acessadas imediatamente.
Forma arbitrária
<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
Os estilos em si são suficientemente descritos na
documentação .
Vale a pena notar que esses são estilos familiares com uma pequena mistura de css.
Eu queria mostrar como aplicar o estilo de um arquivo separado.
Primeiro, todos os arquivos xaml devem ser recursos avalonianos.
<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 ")});
Coisinhas boas.
TextBox tem propriedade Marca d'água
Isso permite não procurar pacotes de terceiros e não cercar o TextBlock sobre o TextBox, que pode ser lido em muitos tutoriais para o wpf.
<TextBox Watermark = "Street address" />
Além disso, toda a ligação padrão usa PropertyChanged para acionar a atualização da propriedade associada.
Em conclusão
Sugiro a todos que experimentem esse quadro interessante.
Obrigado aos usuários
Artyom Gorchakov e
Nikita Tsukanov .
E lembro que a avalonia tem um apoio acolhedor e surpreendente no
Gitter .