2016-12-01 81 views
2

任何人都可以解釋爲什麼我的DataTemplate裏面的不適用我的UserControl.Resources元素中定義的樣式,但第二個TextBlock('測試B')呢?WPF中的ItemsControl/DataTemplate內沒有樣式繼承?

我認爲它可能與某個設置爲不繼承的依賴屬性有關,但我無法確定。

<UserControl.Resources>  
    <Style TargetType="{x:Type TextBlock}"> 
     <Setter Property="Padding" Value="8 2" /> 
    </Style> 
</UserControl.Resources> 
<StackPanel> 
    <ItemsControl ItemsSource="{Binding}">   
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <!--Padding does not apply--> 
       <TextBlock>Test A</TextBlock> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
    <!--Padding applies--> 
    <TextBlock>Test B</TextBlock> 
</StackPanel> 
+0

可能的重複[爲什麼我的TextBlock/TextBox不適用來自基礎樣式的值?](http://stackoverflow.com/questions/7597455/why-doesnt-my-textblock-textbox-apply-values-從基礎風格) – ASh

+1

我不知道爲什麼會發生這種情況,但如果您將樣式設置爲x:Key,然後將其應用爲靜態資源,它將起作用。 – adminSoftDK

回答

1

模板被視爲邊界。模板中的元素落在此邊界範圍內,並且在運行時查找具有匹配目標類型的樣式在此範圍內結束,結果外部的TextBlock將拾取樣式,而內部的樣式將會拾取。像adminSoftDK說你應該give the style an x:Key and then apply it as static resource it will work。檢查this