рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо .NET UI рдЯреВрд▓рдХрд┐рдЯ AvaloniaUI 0.9

Avalonia рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕, рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо .NET UI рдЯреВрд▓рдХрд┐рдЯ рд╣реИ рдЬреЛ WPF рдФрд░ UWP рддрдХрдиреАрдХреЛрдВ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реИред рдпрд╣ Windows, macOS рдФрд░ Linux, .NET Core 2.0-3.1, XAML, рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ, рд▓реБрдХрд▓реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред



(VDPV XOrg рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ)


рд╕рдВрд╕реНрдХрд░рдг 0.9 рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝рд╛ рдЕрдкрдбреЗрдЯ рдерд╛: рд╕рдВрдХрд▓рд┐рдд XAML, рд╡реИрд╢реНрд╡рд┐рдХ рдореЗрдиреВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рдордирдорд╛рдиреЗ рдЖрдХрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдЗрдирдкреБрдЯ рд╕рдорд░реНрдерди рдФрд░ рдХреБрдЫ рдФрд░ред


рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рд╡рд┐рд╡рд░рдг рдорд╛рдВрдЧрддрд╛ рд╣реВрдВред


рд╕рдВрдХрд▓рд┐рдд XAML


рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, XAML рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЖрд╡реЗрджрди рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рд╣реБрдЖред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрдИ рдиреБрдХрд╕рд╛рди рдереЗ:


  • рдзреАрд░реЗ-рдзреАрд░реЗ
  • рдХрд╛рд░реНрдпрдХреНрд░рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (QML, рдореИрдВ рдЖрдкрдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ)
  • рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкрд╛рд░реНрд╕рд░ рдиреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдирд╛рдо рдкрд░ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╕рдордп "рдХрдВрдЯреЗрдВрдЯ 'рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдореВрд▓реНрдп рд╢реВрдиреНрдп рд╣реИ"

рд╣рдорд╛рд░рд╛ рдирдпрд╛ рд╕рдВрдХрд▓рдХ рд╕рдм рдХреБрдЫ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реАрдзреЗ MSIL рдХреЛ рднреЗрдЬ рджреЗрддрд╛ рд╣реИред рддреБрдо рднреА рджреБрдирд┐рдпрд╛ рдХреЗ рд╡рд┐рдШрдЯрдирдХрд░реНрддрд╛ рдХреЛ рджреЗрдЦреЛ рдФрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:


рд╡реИрд╕реЗ, рдбреАрдХреЙрдореНрдкрд┐рд▓реЗрдЯрд░, рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред


рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд▓реЙрдиреНрдЪ рдЯрд░реНрдмреЛ-рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛ред рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ рд╣рдорд╛рд░реА рдирд┐рдпрдВрддреНрд░рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ 40% рддреЗрдЬреА рд╕реЗ рдЪрд▓рдиреЗ рд▓рдЧреАред


рдЬрдм рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдЪреЗрдХ рдиреЗ рдорджрдж рдирд╣реАрдВ рдХреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдирд╡рд░реНрдЯрд░ рдореЗрдВ рдХреБрдЫ рдЕрд▓рдЧ рд╣реЛ рдЧрдпрд╛), рддреЛ рдЖрдк XAML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рдХреЗ рдирд┐рд╢рд╛рди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдЖрдо рддреМрд░ рдкрд░, XAML рдореЗрдВ рдбрд┐рдмрдЧрд░ рдХреА рддрд░рд╣, рдЕрдЧрд░ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ:



MacOS рдФрд░ Linux рдкрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдореЗрдиреВ


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкреЙрдкрдкрд┐рдпреЛрдВ рдкрд░, рд╡рд┐рдВрдбреЛ рдХреЗ рдЕрдВрджрд░ рдореЗрдиреВ рдЖрдорддреМрд░ рдкрд░ рдирд╣реАрдВ рдЦреАрдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдХреНрд░реАрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдореЗрдиреВ рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдХрдИ рдбреЗрд╕реНрдХрдЯреЙрдк рд▓рд┐рдирдХреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдг (рдПрдХрддрд╛, рдХреЗрдбреАрдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде, рд╡реИрд▓-рдкреИрдирд▓-рдПрдкрдореЗрдиреВ) рдкрд░ рдПрдХ рд╕рдорд╛рди рд╕реБрд╡рд┐рдзрд╛ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИред


рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдореЗрдВ рдРрд╕реЗ рдореЗрдиреВ рдХрд╛ рд╕рдорд░реНрдерди рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдХреЛрдб рдореЗрдВ рд╡реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:


<Window> <NativeMenu.Menu> <NativeMenu> <NativeMenuItem Header="File"> <NativeMenuItem.Menu> <NativeMenu> <NativeMenuItem Header="Open" Command="{Binding OpenCommand}"/> <NativeMenuItemSeperator/> <NativeMenuItem Header="Recent"> <NativeMenuItem.Menu> <NativeMenu/> </NativeMenuItem.Menu> </NativeMenuItem> <NativeMenuItemSeperator/> <NativeMenuItem Header="Quit Avalonia" Command="{Binding CloseCommand}" Gesture="CMD+Q"/> </NativeMenu> </NativeMenuItem.Menu> </NativeMenuItem> <NativeMenuItem Header="Edit"> <NativeMenuItem.Menu> <NativeMenu> <NativeMenuItem Header="Copy"/> <NativeMenuItem Header="Paste"/> </NativeMenu> </NativeMenuItem.Menu> </NativeMenuItem> </NativeMenu> </NativeMenu.Menu> </Window> 

CMD+Q рдЪрд┐рдВрддрд┐рдд рди рд╣реЛрдВ, рдПрдХ рдЧреИрд░-рдореИрдХ рдкрд░, рдпрд╣ `рдХрдВрдЯреНрд░реЛрд▓ + рдХреНрдпреВ 'рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд░реЗрдЧрд╛ред рдЕрдм рдпрд╣ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╢реЛрдзрдХ "рдХрдорд╛рдВрдб" рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдирд╛рд░реНрдереА рд╢рдмреНрдж рд╣реИред


"рдкрд╛рд░рдВрдкрд░рд┐рдХ" рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП "рдирд┐рдпрдорд┐рдд" рдореЗрдиреВ рдореЗрдВ рдПрдХ рд╣реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ <NativeMenuBar/> рдирд┐рдпрдВрддреНрд░рдг рднреА рдкреЗрд╢ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдЗрд╕ рдореЗрдиреВ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЦреИрд░, рдирд┐рдпрдВрддреНрд░рдг рдЦреБрдж рдХреЛ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдХреЗ рд╕рд╛рде рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рдЦреАрдВрдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред



makoshi рдкрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдмрд╛рд░ рдореЗрдВ рд╡рд┐рдВрдбреЛ рдореЗрдиреВ


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ macOS рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрдиреВ рдЖрдЗрдЯрдо рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдРрд╕реЗ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрдкреВрд░реНрдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред рд╣рдо, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рди рд╣реЛрдВ, рд╣рдо рдЗрд╕ рдореЗрдиреВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ:

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдиреВ рд╕рд╛рдордЧреНрд░реА


рдареАрдХ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрдкрдиреЗ App.xaml рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:


 <Application> <NativeMenu.Menu> <NativeMenu> <NativeMenuItem Header="About MyApp" Command="{Binding AboutCommand}" /> </NativeMenu> </NativeMenu.Menu> </Application> 

рддрджрдиреБрд╕рд╛рд░, Application рдЕрдм рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ DataContext , рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдПрдХ рджреГрд╢реНрдп рдореЙрдбрд▓ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЦреИрд░, рд╡рд╣ рдЬрд╣рд╛рдВ рдмрд╛рдВрдзрдирд╛ рдерд╛ред


рд▓рд┐рдирдХреНрд╕ рдкрд░, рдЗрд╕рдХреА рд╕рд╛рдорд╛рдиреНрдп, рдЕрд╣рдо, рд╡рд┐рд╖рдорддрд╛ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 .With(new X11PlatformOptions { UseDBusMenu = true }) 

рдореИрдВрдиреЗ Ubuntu 18.04 рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдПрдХрддрд╛ рдФрд░ рдХреЗрдбреАрдИ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рдбрд┐рд╕реНрдЯреНрд░реЛрд╕ рдореЗрдВ рдХреИрд╕реЗ рд╣реИред


рдкреНрд░рдмрдВрдзрд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╡рд╛рдж рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдк рджреЗрд╢реА рд╕рдВрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕рд╣рдЬ GTK рдХреЛ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЦреАрдВрдЪрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ), рддреЛ рдЕрдм рдЖрдк рд╕реНрд╡рдпрдВ Avalonia рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



рд╕рдВрдкреВрд░реНрдг API рд╕рдорд╛рди рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕реЗ AppBuilder рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


 AppBuilder.Configure<App>() .UsePlatformDetect() .UseManagedSystemDialogs(); 

рдпрджрд┐ рдЖрдк рдПрдХ рдХрд╕реНрдЯрдо рд╡рд┐рдВрдбреЛ рдореЗрдВ рдбрд╛рдпрд▓реЙрдЧреНрд╕ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣рд╛рдВ рдПрдХ рдлреНрд░реЗрдо рдмрдирд╛рдПрдВ, рдЕрдкрдиреЗ рд░рдВрдЧреЛрдВ рдХреЛ рд░рдВрдЧрдиреЗ рдХреЗ рд▓рд┐рдП), рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 .UseManagedSystemDialogs<AppBuilder, MyCustomWindowType>(); 

ItemsRepeater


ItemsRepeater UWP рд╕реЗ рдкреЛрд░реНрдЯ ItemsRepeater рдЧрдпрд╛ рд╣реИред рдпрд╣ рдирд┐рдпрдВрддреНрд░рдг рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдФрд░ рдЪрд┐рдХрдиреА рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдЖрдЙрдЯ рдХреЛ рд╕рдВрд▓рдЧреНрди рд▓реЗрдЖрдЙрдЯ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рд╕рднреА рд╕реВрдЪреА рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЛ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдЖрдк рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


WPF рд╕реЗ рдЖрдпрд╛рдд рдЧреНрд░рд┐рдб рдФрд░ рдЧреНрд░рд┐рдбрд╕реНрдкреНрд▓рд┐рдЯрд░


рд╣рдо рдЕрдм рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рдЧрднрдЧ-рдЬрд▓реНрдж-рд╢рд╛рдпрдж-рдкреВрд░реА рддрд░рд╣ рд╕реЗ-рдмрд╣реБрдд-рдмрд╣реБрдд-рдЦреБрд▓реЗ-рд╕реНрд░реЛрдд WPF рд╕реЗ рдкреЛрд░реНрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреБрд▓реЗ рднрд╛рдЧреЛрдВ рд╕реЗред


рдЗрд╕ рдмрд╛рд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рд╕рднреА SharedSizeGroups рдФрд░ GridSplitter рдХреЗ рд╕рд╛рде рдЧреНрд░рд┐рдб рдЬреИрд╕реА рдореВрд▓рднреВрдд рдЪреАрдЬрд╝ рдХреЛ рдШрд╕реАрдЯрд╛ред рддреЛ рдЕрдм рдЬреЛ рдХреЛрдб WPF рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рди рдХрд┐ "рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рдЬреИрд╕рд╛, рд▓реЗрдХрд┐рди ..."ред


рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди


рдЙрди рдкрд░ рдмрд╣реБрдд рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╣рд░ рдЬрдЧрд╣ рд╕реЗ LINQ рдХреЛ рдЙрдЦрд╛рдбрд╝рдирд╛ рдФрд░ рд╕рдмрд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЖрд╡рдВрдЯрдиред рдЗрд╕рд▓рд┐рдП рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрд╕рдкреАрдПрд╕рдПрдл рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдПрдлрдкреАрдПрд╕ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдПрдирд┐рдореЗрд╢рди рд╣реИрдВред


KMS / DRM / GBM / Linux рдкрд░ libinput


рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рд╕рд╛рдордиреЗ рдХреНрдпрд╛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рд╣рдо рдЙрд╕реА рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдП, рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рдмрдВрдзрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдзреАрд░реЗ-рдзреАрд░реЗ Xorg рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдУрдкрдирдЧреЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рдг рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдкрдХреЛ рдХрд┐рдпреЛрд╕реНрдХ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддреА рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдФрд░ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВред


рд╕реНрдкрд░реНрд╢ рдЗрдирдкреБрдЯ рд╕рдорд░реНрдерди


рдЕрдм рддрдХ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдЯрдЪ рд╕реНрдХреНрд░реАрди рд╣реИ, рддреЛ рдЗрд╕реЗ рдЕрдкрдиреЗ AppBulet рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝рдХрд░ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 .With(new X11PlatformOptions { EnableMultiTouch = true }) .With(new Win32PlatformOptions { EnableMultitouch = true }) 

рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реНрдкрд░реНрд╢ рдЗрдирдкреБрдЯ рдХреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдорд╛рдЙрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛, рддреЛ рдЕрдм рд╣рдордиреЗ UWP рдореЙрдбрд▓ рдкреЙрдЗрдВрдЯрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реНрдкрд░реНрд╢ рд╕рддрд╣ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ "рдкреЙрдЗрдВрдЯрд░" рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЬреЗрд╕реНрдЪрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕рдорд░реНрдерди рднреА рдкреЗрд╢ рдХрд┐рдпрд╛, рдЬрд┐рд╕ рдкрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрдВрдЧрд▓реА рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ред


рдкрд╣рд▓реЗ рдбреЗрдореЛ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реАрдбрд┐рдпреЛ:




рдЙрддреНрдкрд╛рджрди рддреИрдпрд╛рд░ рд╣реИ


рд╣рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдкреВрдЫрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ "рдХреНрдпрд╛ рдпрд╣ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ?", "рдФрд░ рдЬрдм 1.0 рд╣реИ?"ред рд╣рд╛рдБ, рдпрд╣ рдЙрдкрдпреБрдХреНрдд рд╣реИред 1.0, рд╕реЗрдореАрд╡реАрдпрд░ рдореЙрдбрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛, рдЬрдм рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдПрдкреАрдЖрдИ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдереЛрдбрд╝рд╛-рдереЛрдбрд╝рд╛) рдореЗрдВ рдмрджрд▓рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдВрдЧреЗ , рдпрд╛ рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдг рдореЙрдбрд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ "AvaloniaUI 71 рд░рд┐рд▓реАрдЬрд╝" рд╣реЛрдЧрд╛ред


рд╡рд░реНрддрдорд╛рди рдореЗрдВ AvaloniaUI рдкрд░ рдмрдбрд╝реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдзрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВред рд╣рдо AvaloniaUI рдХреЛ рдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП рдХрдИ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рд╣реИрдВред рд╣рдо рдЗрд╕ рд░рд┐рд▓реАрдЬ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЙрдирдХреА рдЕрдореВрд▓реНрдп рдорджрдж рдХреЗ рд▓рд┐рдП рдЗрди рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЯреАрдореЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рдХрд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред


рдЗрд╕ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХреЗ рдорджреНрджреЗрдирдЬрд░, рд╣рдо рдПрдХ рдирдП рд░рд┐рд▓реАрдЬрд╝ рд╕рдкреЛрд░реНрдЯ рдореЙрдбрд▓ рдХреА рдУрд░ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЬрд╛рд░реА рд╣реЛрдиреЗ рддрдХ рд╢рд╛рдЦрд╛ 0.9 рдХреЛ рдмрдЧ рдлрд┐рдХреНрд╕ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмреИрдХрдкреЛрд░реНрдЯрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рд╛рде рд╣реА рдЕрдЧрд▓реЗ рд╕рд╛рд▓, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЖрдзрд╛рд░ рдкрд░ рддрдХрдиреАрдХреА рд╕рд╣рд╛рдпрддрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреАред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд▓рд╛рд▓рдЪреА рд╣реИрдВ, рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЙрддреНрд╕рд╛рд╣ рдФрд░ "рдХрд╛рдо рдХреЗ рдмрд╛рдж рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ" рджреВрд░ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдкреВрд░реНрдгрдХрд╛рд▓рд┐рдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╢рд░реНрддреЛрдВ рдкрд░ рдЕрдм рддрдХ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЕрдЧрд░ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдпрд╛ рдХреБрдЫ рдЬрд░реВрд░реА рд╣реИ, рддреЛ рдЯреАрдо@avaloniaui.net рдХреЛ рд▓рд┐рдЦреЗрдВ


рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ


рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдПрдХ рдХрд╛рдлреА рд╡рд┐рд╕реНрддреГрдд рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИред WPF / UWP рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рд╕рд╣рдЬ рдФрд░ рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ ред


рдзрдиреНрдпрд╡рд╛рдж


рдЗрд╕ рд░рд┐рд▓реАрдЬ рдХреЛ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ grokys , jkoritzinsky , kekekeks , danwalmsley , jmacato , marchingcube , wieslawsoltes , gibibald рдФрд░ рдХрдИ рдЕрдиреНрдп рдореЗрдВред


рдЕрд╡рд▓реЛрдирд┐рдпрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ рд╣реИ: рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛, рдПрдХ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдорджрдж рдХрд░рдирд╛ред рдпреЛрдЧрджрд╛рди рдкреГрд╖реНрда рджреЗрдЦреЗрдВред

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


All Articles