给出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>
有谁知道发生了什么事?
答案 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>