一起學習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.

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM