2016-12-01 55 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