XAML 屬性元素,標記擴充套件和註釋

Charles_Su發表於2021-05-18

 這節來講一下XAML中的屬性元素,標記擴充套件,和註釋。

 

屬性元素

    一般的,我們想要對一個標籤的屬性賦值,可以直接在標籤內部鍵入屬性名給其賦值,如我們給button的Content屬性賦值:

<Button Content="I am Button" />

    或者我們在後臺通過標籤的Name找到這個標籤,用程式碼為其賦值。

    屬性元素則是為標籤屬性賦值的第三種方法。

    顧名思義,屬性元素是以元素的形式來表達一個標籤的屬性,它的語法如下:

<tag>  
    <tag.property>   
         value 
     </tag.property>
</tag>

    上方給button的Content賦值的程式碼就可以改為以下形式:

<Button>
  <Button.Content>
      I am button
  </Button.Content>
</Button>

    我們前幾節講到,標籤有非空和空標籤之分,非空標籤是可以有自己的內容的標籤,所以我們為標籤的內容賦值時,是可以省略屬性元素的,以上程式碼就可以簡化為:

<Button> I am button</Button>

    系統會預設將“I am button” 賦值給Content,只有內容可以這麼做,其它的屬性若要使用屬性元素賦值都是需要顯示宣告的。

    你可能會疑問,屬性標籤看起來讓我們的程式碼變得複雜了,當然,如果給元素的屬性賦一些簡單的值,我們不需要用屬性元素,就像寬,高這樣的屬性,我們直接在元素內部賦值要簡單的多,但是當我們遇到一些複雜的賦值情況,屬性元素的優勢就顯示出來了,再拿button距離,我想讓button的內容是一個圖示加文字,這時候,顯然在屬性內部直接賦值是無法做到了,我們要麼在後臺使用程式碼,要麼就需要用屬性元素了,請看例項:

<Button>
    <WrapPanel>  
        <materialDesign:PackIcon 
            Width="16"
            Height="16"
            Margin="0 0 5 0"
            VerticalAlignment="Center"
            Foreground="White"
            Kind="Logout" />
        <TextBlock TextWrapping="Wrap" Text="退出登入" FontSize="15" VerticalAlignment="Center" />
    </WrapPanel> 
</Button>

    效果如下:

    在button內部放了一個WrapPanel元素,在這種情況下,屬性元素是最簡單合適的,畢竟C#程式碼是用來寫邏輯的,不應過多涉及UI的編寫。

 

標記擴充套件

    標記擴充套件是xmal最特色的一個東西,它同樣是給屬性賦值的一種形式,但是標記擴充套件正如它的名字一樣,是對屬性賦值的擴充套件,它是我們後續要講的MVVM模式中控制元件和資料的橋樑。

    標記擴充套件是由大括號括起來的一些內容組成的,請看下面的程式碼:

<TextBlock x:Name="text_show" Text="你好"/>
<Button Width="50" Height="30" Content="{Binding Text,Source={x:Reference text_show}}"></Button>

  

    上述程式碼中{Binding Text,Source={x:Reference text_show}}就是標記擴充套件,它使用Binding命令和Source命令將button的內容跟TextBlock的Text屬性繫結了起來。當我們更改TextBlock的Text屬性的值的時候,Button按鈕的值也會變,程式執行如下:

    後續的MVVM章節,我們會講控制元件的值與VM頁面中的屬性繫結,就是依賴標記擴充套件這個語法。當我們改變VM屬性值時,前臺的控制元件值就會變,這就是WPF與眾不同的地方:資料驅動控制元件。初學者,可以先做了解,後續我們會持續接觸標記擴充套件,而且也只有在程式碼中才能更好的理解標記擴充套件的強大。

 

註釋

    最後講一下xaml中的註釋。

    使用<!-- 註釋內容 --> 來註釋一段xaml程式碼,但是需要注意一下幾點:

    1.註釋只能出現在開始標籤和結束標籤之間,也就是隻能出現在內容區域

    2.不能註釋標籤的屬性

    3.不能巢狀使用註釋

 

本節到此結束...

相關文章