一起學習Avalonia(二)

週末如期而至。今天介紹一點點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.

本週的學習就到這裏,歡迎大家討論並指正錯誤。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章