WPF中ItemsControl/DataTemplate内没有样式继承?

5

有人能解释一下为什么我DataTemplate中的TextBlock没有应用我在UserControl.Resources元素中定义的样式,但第二个TextBlock('Test B')有吗?

我认为这可能与某个依赖属性设置为不继承有关,但我不能确定。

<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>

1
我不知道为什么会发生这种情况,但如果你给样式一个x:Key,然后将其作为静态资源应用,它就可以工作。 - adminSoftDK
1个回答

5

模板被视为边界。模板内的元素处于这个范围内,查找与目标类型匹配的样式在运行时在此范围内结束,因此外部的 TextBlock 将会捕获到该样式,而内部的则不会。就像 adminSoftDK 所说的那样,你应该给样式一个 x:Key,然后将其应用为静态资源,它就会起作用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接