2014-03-27 123 views
2

爲什麼這款Style無法在WPF中使用? TextBlock應該是紅色的,但不是。它保持黑色。當TextBlock在模板中時,這只是起作用。全球風格不適用於WPF

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <Style TargetType="TextBlock"> 
      <Setter Property="Foreground" Value="Red"></Setter> 
     </Style> 
    </Window.Resources> 
    <Grid> 
     <ListView> 
      <ListView.Items> 
       <ListItem></ListItem> 
      </ListView.Items> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <TextBlock>Hallo</TextBlock> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 

    </Grid> 
</Window> 
+1

似乎是一個錯誤:[SO-Answer](http://stackoverflow.com/a/2479695/3411327)。 – user3411327

回答

5

隱模板Styles僅限於從System.Windows.Controls.Control繼承,除非它們在Application.Resources定義,因此無論是給你的風格x:Key並明確使用控制:

<Window.Resources> 
    <Style TargetType="TextBlock" x:Key="myTextBlockStyle"> 
     <Setter Property="Foreground" Value="Red"></Setter> 
    </Style> 
</Window.Resources> 

<TextBlock Style="{StaticResource myTextBlockStyle}">Hallo</TextBlock> 

或將其移動到Application.Resources

<Application.Resources> 
    <Style TargetType="TextBlock"> 
     <Setter Property="Foreground" Value="Red"></Setter> 
    </Style> 
</Application.Resources> 
-2

如果你想定義一個風格並讓它有au自動應用於該類型的所有控件(無需爲每個控件手動指定樣式),您需要像這樣定義它。

E.G.

<Style x:Key="{x:Type TextBox}" TargetType="TextBox"> 
     <Setter Property="IsUndoEnabled" Value="True"></Setter> 
     <Setter Property="UndoLimit" Value="10"></Setter> 
     <Setter Property="ContextMenu" Value="{StaticResource textContextMenu}"></Setter> 
     <Setter Property="SpellCheck.IsEnabled" Value="True"></Setter> 
    </Style>