UWP为什么样式不适用于DataTemplate中的TargetTypes?

时间:2016-02-04 19:48:27

标签: xaml uwp

给出Page.Resource中的样式:

    <Style x:Name="ItemTitle" TargetType="TextBlock">
        <Setter Property="FontSize" Value="16"></Setter>
        <Setter Property="FontWeight" Value="Bold"></Setter>
    </Style>

它已正确应用于同一页面上的任何常规TextBlock。

但是,当我在该页面上的GridView中为Item使用DataTemplate时,此样式不适用。

    <DataTemplate  x:Key="Output" x:DataType="vm:Output">
        <TextBlock Text="{x:Bind Text}"></TextBlock>
    </DataTemplate>

当我在DataTemplate上显式应用样式时,它确实有效,例如:

    <DataTemplate  x:Key="Output" x:DataType="vm:Output">
        <TextBlock Style="{StaticResource ItemTitle}" Text="{x:Bind Text}"></TextBlock>
    </DataTemplate>

有谁知道发生了什么事?

1 个答案:

答案 0 :(得分:2)

预期和有意的。如果它不是从Control派生的(如DataTemplate)那么它不会继承隐式样式,除非它们在应用程序资源字典中作为全局默认值。

或更具体地说;

  

在查找不是Control子类型的元素的隐式样式时,模板被视为封装边界。

希望这会有所帮助。欢呼声。

<强>附录:

如果你在模板中嵌套了很多相同的元素,你可以只设置一次并允许它继承所有类型的嵌套控件,如(伪);

<Parent>
  <Parent.Resources>
    <Style TargetType="TextBlock" BasedOn="{StaticResource ItemTitle}"/>
  <Parent.Resources>

  <!-- These will all inherit the Style resource now,
       without explicit style setting individually. -->
  <TextBlock/>
  <TextBlock/>
  <TextBlock/>

</Parent>