周末如期而至。今天介紹一點點Avalonia模板生成項目的內容。
Avalonia的UI一樣是通過xmal實現的,我們生成項目后,與WPF有相同和不同的地方,現在來看看是什么東西。
1.項目結構
這里項目結構按照MVVM的樣式生成的,我不打算多說這個了。總之,xmal直接綁定的類是viewmodel.
2.app.xmal
這里和WPF就不一樣了,WPF是直接指定一個地址,用來啟動程序主窗口和一些資源。
Avalonia引用空間任然一樣,我們重點聊聊其余部分。
<Application.DataTemplates>
<local:ViewLocator/>
</Application.DataTemplates>
在程序中自動生成了ViewLocator類,這個類就是用來初始化基本UI的,比如當前主窗口是MainWindow,對應的綁定了MainWindowViewModel數據類,ViewLocator通過數據類全名稱找到了view的東西。當前還用不到,放在一邊。
啟動是不是這個呢?不是。
Avalonia啟動和asp.net core相似,Program中main方法決定了啟動,加入APP類,程序入口調用了APP的初始化函數,解析了xmal,最后完成調用OnFrameworkInitializationCompleted方法,在內部初始化MainWindow,並且為其綁定MainWindowViewModel。這樣啟動了主窗口。
回到APP。
<Application.Styles>
<StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml"/>
<StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseLight.xaml"/>
</Application.Styles>
這是另外一部分,這個就和WPF不同了,Avalonia擴展了資源引用,采用了Styles來應用樣式集。StyleInclude節點是表明包含這這個樣式集,DefaultTheme.xaml中可能本身包含了多個樣式集。
當然也可以為控件使用樣式,我們后面在詳細聊這個。當前我們根據項目樣式來。
大家可以先看看這個:https://avaloniaui.net/docs/styles 以及https://avaloniaui.net/docs/quickstart/assets 注意區分。
Styles節點后面的路徑。
avares是引用資源的方法,另外還有resm。 resm需要作為清單嵌入的方式,由編譯器完成。
Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml"表明以avares查找程序集Avalonia.Themes.Default.dll中名稱為DefaultTheme.xaml的樣式集文件。如果程序集中有路徑,則可能是這樣的:
Source="avares://Avalonia.Themes.Default/Styles/DefaultTheme.xaml",說明放在Styles目錄里面。
resm的方式是放在程序集集資源清單中的資源,例如:<Image Source="resm:MyApp.Assets.icon.png"/>
此時文件的屬性中應該是嵌入資源:
3.MainWindow.xmal
這里基本和WPF一樣了。只是Avalonia在開發時綁定數據源是這個:
<Design.DataContext>
<vm:MainWindowViewModel/>
</Design.DataContext>
這樣綁定了當前程序的MainWindowViewModel類,
<TextBlock Text="{Binding Greeting}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
這樣講textblock的屬性關聯了MainWindowViewModel類的Greeting屬性。
MainWindowViewModel類的實例又是怎么處理的呢?🙂,請回到App.xmal.
本周的學習就到這里,歡迎大家討論並指正錯誤。