AvaloniaUI-Funktionen mit der benutzerdefinierten MessageBox

Avalonia ui ist ein wunderbarer Rahmen, zu dem Sie immer wieder zurückkehren möchten. Kehren wir also noch einmal zurück und sehen uns einige der Funktionen in meinem Meldungsfeld an.



Wer ist Avalonia?


Avalonia ist ein plattformübergreifendes Framework, mit dem Sie grafische Oberflächen auf allen aktuellen Plattformen entwickeln können.

In seiner Struktur ist es unglaublich nah an wpf: ähnliche xaml, ähnliche Bindung. Es gibt sogar ein offizielles Tutorial für wpf-Entwickler.

Avaloniya zeichnet sich auch dadurch aus, dass es auf jedem der Systeme auf seine nativen Schnittstellen zugreift: Win32, MonoMac, X11 ...

Was erschien in der aktualisierten Version
  1. Unterstützung für 13 verschiedene Nachrichtensymbole.
  2. Möglichkeit, den Nachrichtentext mit der Tastenkombination Strg + C zu kopieren.
  3. Passen Sie die Größe des Fensters an den Inhalt an.
  4. Ein vereinfachtes Stilsystem, mit dem sich jeder problemlos an der Entwicklung und Unterstützung neuer beteiligen kann.
  5. Durch Ersetzen von TextBlock durch TextBox kann nun der Text im Fenster ausgewählt werden.
  6. Die Architektur selbst wurde komplett neu gestaltet.


Die Dokumentation finden Sie bei gitlab .

Das Paket selbst kann von nuget heruntergeladen werden .

Lassen Sie uns über die Funktionen sprechen


Wenn es Vergleiche gibt, wird es natürlich mit wpf verglichen.

Das erste, was nach den Frameworks von ms auffällt, ist die Fähigkeit, Befehle an Methoden zu binden. Ja, funktional bietet es weniger Möglichkeiten, aber als Reaktion darauf vereinfacht es den Ansatz zur Entwicklung eines Ansichtsmodells.

<Button Command = "{Binding RunTheThing}" CommandParameter = "Hello World"> Do the thing! </ Button> 

  public void RunTheThing (string parameter) { // Code for executing the command here. } 

Avaloniya wird auch mit reaktiven Erweiterungen erstellt, mit denen Sie mit Framework-Ereignissen wie mit erstklassigen Objekten mithilfe der deklarativen LINQ-Abfragesyntax arbeiten können. So können Sie einen präzisen und lesbaren Code schreiben.

Wenn Sie jedoch etwas tiefer gehen, wird nicht alles so rosig und offensichtlich, und die Dokumentation wurde noch nicht in Erinnerung gerufen (aber Sie können helfen).

Bindung an Bild


Das Problem, auf das ich beim Aktualisieren meines Projekts fast sofort stieß, war das Anzeigen von Bildern in meinem Fenster.

Zuerst müssen Sie ein Verzeichnis mit Bildern als Avalonia-Ressource registrieren, da es wichtig ist, dass die Symbole in jedem Benutzer angezeigt und bequem mit dem gesamten Code verpackt werden.
  <ItemGroup> ... <AvaloniaResource Include = "Assets \ *" /> </ ItemGroup> 

Jetzt können Sie das ausgewählte Bild einfach im Bild-Tag einstellen.

  <Image Source = "/ Assets / error.ico" /> 


Bei Verwendung von vm Source können Bilder jedoch nicht einfach an Zeichenfolgen weitergeleitet werden, sondern Sie müssen Bitmap verwenden.

  <Image Source = "{Binding ImagePath}" /> 

  public Bitmap ImagePath {get; private set; } 


Und dementsprechend müssen wir jetzt unser Image aus den Ressourcen extrahieren. Was Sie brauchen, um den Locator Avalonia zu verwenden.

  ImagePath = new Bitmap (AvaloniaLocator.Current.GetService <IAssetLoader> () .Open (new Uri ($ "avares: // ASSEMBLYNAME / relative / project / path / {ImageName} .ico"))); 

Es ist zu beachten, dass für eingebettete Ressourcen beim Kompilieren von uri das Präfix resm: // und für avalonia - avares: // verwendet wird .

Zeichnen


Die Zahlen in Avalonia und wpf sind ähnlich, aber die öffentlichen Eigenschaften sind unterschiedlich. Daher konnten nach dem Herunterladen von SVG-Bildern und dem Konvertieren in ms xaml mithilfe von inskape nicht sofort auf sie zugegriffen werden.

Beliebige Form

  <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" /> 

Wird zu

  <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" /> 

Eine Linie

  <Line X1 = "25" Y1 = "37" X2 = "25" Y2 = "39" StrokeThickness = "2" Stroke = "# FFFFFFFF" StrokeMiterLimit = "10" StrokeStartLineCap = "Round" StrokeEndLineCap = "Round" /> 

Wird zu

  <Line StartPoint = "25.37" EndPoint = "25,39" StrokeThickness = "2" Stroke = "# FFFFFFFF" StrokeStartLineCap = "Round" StrokeEndLineCap = "Round" /> 

Stile


Die Stile selbst sind in der Dokumentation ausreichend beschrieben.

Es ist erwähnenswert, dass dies vertraute Stile mit einer kleinen Beimischung von CSS sind.

Ich wollte zeigen, wie man den Stil aus einer separaten Datei anwendet.

Erstens müssen alle xaml-Dateien avalonische Ressourcen sein.

  <ItemGroup> <AvaloniaResource Include = "** \ *. Xaml"> <SubType> Designer </ SubType> </ AvaloniaResource> ..... </ ItemGroup> 

Zweitens werden Stile auf dieselbe Weise wie Bildressourcen mit uri und locator angewendet.

  YourControl.Styles.Add (new StyleInclude (new Uri ("avares: //ASSEMBLYNAME/relative/project/path.xaml")) {Source = new Uri ("avares: // ASSEMBLYNAME / relative / project / path.xaml ")}); 

Schöne kleine Dinge.


TextBox hat die Eigenschaft Wasserzeichen

Dies ermöglicht es, nicht nach Paketen von Drittanbietern zu suchen und TextBlock nicht über TextBox zu fechten, was in vielen Tutorials für wpf gelesen werden kann.

  <TextBox Watermark = "Street address" /> 

Außerdem verwendet die gesamte Standardbindung PropertyChanged, um die Aktualisierung der zugeordneten Eigenschaft auszulösen.

Abschließend


Ich empfehle jedem, diesen interessanten Rahmen auszuprobieren.

Vielen Dank an die Benutzer Artyom Gorchakov und Nikita Tsukanov .

Und ich erinnere Sie daran, dass Avalonia im Gitter eine gemütliche und erstaunliche Unterstützung hat.

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


All Articles