我再次与UWP斗争。似乎我无法在样式中级联样式。这是否是UWP中不允许的其他内容?
这就是我想要做的......
<Style x:Key="MainMenuRadioButtonStyle" TargetType="RadioButton">
<Setter Property="Backgroud" Value="Grey"/>
<Style.Resources TargetType="TextBlock">
<Setter Property="Margin" Value="12,0,0,0"/>
</Style.Resources>
</Style>
然而,VS2015抱怨&lt; Style.Resources&gt;是无效的。我不想在RadioButton的内容中单独设置TextBlock的样式。
答案 0 :(得分:2)
在UWP(或一般XAML)中不支持的样式内级联。你通常做的是拆分可重复使用的样式/属性并引用它们。
<Thickness x:Key="MyMargin">"12,0,0,0"</Thickness>
<Style x:Key="MainMenuRadioButtonStyle" TargetType="RadioButton">
<Setter Property="Background" Value="Grey"/>
<Setter Property="Margin" Value="{StaticResource MyMargin}" />
</Style>
您尝试实现的目标是改变&#39; RadioButton
的模板。您可以在此处找到完整模板:https://msdn.microsoft.com/en-us/library/windows/apps/mt299147.aspx。如果你深入了解模板,你会看到这段代码:
<ContentPresenter x:Name="ContentPresenter"
Content="{TemplateBinding Content}"
ContentTransitions="{TemplateBinding ContentTransitions}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Grid.Column="1"
AutomationProperties.AccessibilityView="Raw"
TextWrapping="Wrap" />
这是显示RadioButton
实际内容的部分,因为您可以看到它不是TextBlock
,而是ContentPresenter
(其中将显示文本,就好像它是TextBlock
)。好消息是此控件具有Margin
属性,该属性从模板中获取Padding
属性的值。所以为了达到你想要的效果,你可以简单地填写这个属性:
<Style x:Key="MainMenuRadioButtonStyle" TargetType="RadioButton">
<Setter Property="Background" Value="Grey"/>
<Setter Property="Padding" Value="{StaticResource MyMargin}" />
</Style>
如果您想要更改默认模板中不可用的属性,那么您必须创建自己的模板。