在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>
你试图实现的是'改变'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>
如果你想改变所不具备的默认模板的属性,那么你就必须创建自己的模板。
Bart,谢谢。你开放线确认这是不可能的是我期待的,这是一个真正的耻辱。 WPF中的XAML样式确实具有与CSS非常相似的功能。我越努力在UWP中发展,我越是感到沮丧。微软的“A开发者最佳体验”标签是一个笑话。没有实体框架支持,没有SQL Express,没有使用SQL Express的合并复制支持。从工具箱中删除了一些控件,例如StatusBar,DataGrid,DockPanel。我迄今的发展经历是缓慢而令人沮丧的。无论如何,咆哮结束,再次感谢。 –
它仍然是一个沙箱环境(从头开始重写),所以你确实有限。希望你能学会在某些时候(在3 + y我已经习惯了沙盒之后)和它一起生活,并开始享受它:) – Bart
尽管令人沮丧,但当我找到或开发替代解决方案时(像写作我自己的数据复制)它确实令人满意。干杯巴特。 :) –