WPF元素類型樣式概念詳解
WPF開發工具的使用幫會組開發人員實現了輕松簡單的圖形界面處理。對于WPF元素類型樣式這樣的基礎理解是在學習的過程中非常重要的知識點。#t#
命名樣式非常有用,當你得到一組屬性并應用到特點的元素上。然而,如果你想要應用一個統一的樣式到所有確定元素類型的實例,設置TargetType而不用一個Key。
- < !-- no Key -->
- < Style TargetType=
"{x:Type Button}"> - < Setter Property=
"FontSize" Value="32" /> - < Setter Property=
"FontWeight" Value="Bold" /> - < /Style>
- < !-- no Key -->
- < Style TargetType=
"{x:Type TextBlock}"> - < Setter Property=
"FontSize" Value="32" /> - < Setter Property=
"FontWeight" Value="Thin" /> - < Setter Property=
"Foreground" Value="White" /> - < Setter Property=
"HorizontalAlignment"
Value="Center" /> - < /Style>
- < Button Grid.Row="0"
Grid.Column="0" x:ID="cell00" /> - < TextBlock Grid.Row="5"
Grid.ColumnSpan="5" x:ID=
"statusTextBlock" />
如上面這段WPF元素類型樣式示例所示,我們已經得到了兩種樣式,一種是帶有TargetType的Button,沒有key;另一種是帶有TargetType的TextBlock,沒有key。它們都以同樣的方式工作;當創建一個Button或TextBlock的實例而不用現實地設置Style屬性,它使用的樣式將目標類型匹配到控件的類型。
元素類型樣式是便利的,無論何時你想要所有特定元素的實例共享一個外觀,依賴于范圍。例如,迄今,在***窗體中,我們已經在示例中為樣式設置了范圍。
- < !-- Window1.xaml -->
- < Window >
- < !-- every Button or
TextBlock in the Window
is affected -->- < Window.Resources>
- < Style TargetType="
{x:Type Button}">< /Style>- < Style TargetType="
{x:Type TextBlock}">< /Style>- < /Window.Resources>
- < /Window>
盡管如此,我們可能想縮小WPF元素類型樣式的范圍。在我們的示例中,這將工作良好將樣式限定范圍在grid中,從而只有grid中的Button和TextBlock受到影響。
- < !-- Window1.xaml -->
- < Window >
- < Grid >
- < !-- only Buttons or
TextBlocks in the Grid
are affected -->- < Grid.Resources>
- < Style TargetType="
{x:Type Button}">< /Style>- < Style TargetType="
{x:Type TextBlock}">< /Style>- < /Grid.Resources>
- < /Grid>
- < !-- Buttons and TextBlocks
outside the Grid are unaffected -->- < /Window>
或者,如果你想使你的樣式在你的工程中有更大的作用區域,你可以將它們放在應用程序范圍內。
- < !-- MyApp.xaml -->
- < Application >
- < !-- every Button or TextBlock
in the Application is affected -->- < Application.Resources>
- < Style TargetType="{x:Type
Button}">< /Style>- < Style TargetType="{x:Type
TextBlock}">< /Style>- < /Application.Resources>
- < /Application>
一般而言,理解WPF元素類型樣式范圍規則是有用的,因此你可以判斷它們在各種WPF對象模型中的效果。第6章更加詳細地討論了所有種類的資源范圍,包括樣式。
命名樣式和元素類型樣式
當對命名樣式還是元素類型樣式使用作出選擇時,我們的一位評論家說,按照他的經驗,一旦你有10個以上給予元素類型的樣式,對一個特定的控件獲取它的樣式保持跟蹤將非常困難。這是一個原因是我成為命名樣式的粉絲。
對于我而言,樣式是一個在一個地方應用到內容的語義標簽,并且在另一個地方也能獲得一個可視化表示。正如我們的TTT示例那樣簡單,我們已經得到了兩個樣式,一個是為了狀態文字,另一個是為了移動的單元;在我們這么做之前,我們將要得到更多。
主要的區別因素是我們在這些元素中顯示的數據種類,而不是保持WPF元素類型樣式。實際上,我們有一些分配到TextBox控件的樣式,這將無論如何打消基于類型的樣式,甚至是這個簡單的應用程序。