命名樣式非常有用,當你得到一組屬性并應用到特點的元素上。然而,如果你想要應用一個統一的樣式到所有确定元素類型的執行個體,設定TargetType而不用一個Key,如示例5-16所示。
示例5-16


<!-- no Key -->

<Style TargetType="{x:Type Button}">

<Setter Property="FontSize" Value="32" />

<Setter Property="FontWeight" Value="Bold" />

</Style>


<Style TargetType="{x:Type TextBlock}">


<Setter Property="FontWeight" Value="Thin" />

<Setter Property="Foreground" Value="White" />

<Setter Property="HorizontalAlignment" Value="Center" />



<Button Grid.Row="0" Grid.Column="0" x:ID="cell00" />


<TextBlock Grid.Row="5" Grid.ColumnSpan="5" x:ID="statusTextBlock" />


在示例
5-16所示,我們已經得到了兩種樣式,一種是帶有TargetType的Button,沒有key;另一種是帶有TargetType的TextBlock,沒有key。它們都以同樣的方式工作;當建立一個Button或TextBlock的執行個體而不用現實地設定Style屬性,它使用的樣式将目标類型比對到控件的類型。我們的元素類型樣式傳回了我們的遊戲如圖5-4所示。
元素類型樣式是便利的,無論何時你想要所有特定元素的執行個體共享一個外觀,依賴于範圍。例如,迄今,在頂級窗體中,我們已經在示例中為樣式設定了範圍,如示例5-17。
示例5-17

<!-- Window1.xaml -->

<Window
>

<!-- every Button or TextBlock in the Window is affected -->

<Window.Resources>

<Style TargetType="{x:Type Button}">

<Style TargetType="{x:Type TextBlock}">

</Window.Resources>


</Window>
盡管如此,我們可能想縮小元素類型樣式的範圍。在我們的示例中,這将工作良好将樣式限定範圍在
grid中,進而隻有grid中的Button和TextBlock受到影響,如示例5-18。
示例5-18



<Grid

<!-- only Buttons or TextBlocks in the Grid are affected -->

<Grid.Resources>

<Style TargetType="{x:Type Button}">

<Style TargetType="{x:Type TextBlock}">

</Grid.Resources>


</Grid>

<!-- Buttons and TextBlocks outside the Grid are unaffected -->


或者,如果你想使你的樣式在你的工程中有更大的作用區域,你可以将它們放在應用程式範圍内,如示例
5-19。
示例5-19

<!-- MyApp.xaml -->

<Application

<!-- every Button or TextBlock in the Application is affected -->

<Application.Resources>



</Application.Resources>

</Application>
一般而言,了解元素類型的樣式範圍規則是有用的,是以你可以判斷它們在各種
WPF對象模型中的效果。第6章更加詳細地讨論了所有種類的資源範圍,包括樣式。
命名樣式和元素類型樣式
當對命名樣式還是元素類型樣式使用作出選擇時,我們的一位評論家說,按照他的經驗,一旦你有10個以上給予元素類型的樣式,對一個特定的控件擷取它的樣式保持跟蹤将非常困難。這是一個原因是我成為命名樣式的粉絲。
對于我而言,樣式是一個在一個地方應用到内容的語義标簽,并且在另一個地方也能獲得一個可視化表示。正如我們的TTT示例那樣簡單,我們已經得到了兩個樣式,一個是為了狀态文字,另一個是為了移動的單元;在我們這麼做之前,我們将要得到更多。主要的差別因素是我們在這些元素中顯示的資料種類,而不是保持資料的元素類型。實際上,我們有一些配置設定到TextBox控件的樣式,這将無論如何打消基于類型的樣式,甚至是這個簡單的應用程式。