Recursos do AvaloniaUI usando o MessageBox personalizado

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
  1. Suporte para 13 ícones de mensagens diferentes.
  2. Capacidade de copiar o corpo da mensagem usando a combinação de teclas Cntrl + C.
  3. Ajuste o tamanho da janela ao seu conteúdo.
  4. Um sistema de estilo simplificado que permite que qualquer pessoa se envolva facilmente no desenvolvimento e suporte de novos.
  5. Substituindo TextBlock por TextBox, agora o texto na janela pode ser selecionado.
  6. 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) { // Code for executing the command here. } 

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 .

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


All Articles