如何在通用 Windows 平台应用程序中级联样式?
How do I cascade Styles in a Universal Windows Platform app?
我又一次与 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 抱怨 无效。我不想在我的 RadioButton 内容中单独设置 TextBlock 的样式。
UWP 不支持样式内的层叠(或 XAML 通常)。你通常做的是拆分可重复使用的 styles/properties 并引用它们。
<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>
您尝试实现的是 'alter' 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>
如果您想更改默认模板中不可用的属性,则必须创建自己的模板。
我又一次与 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 抱怨
UWP 不支持样式内的层叠(或 XAML 通常)。你通常做的是拆分可重复使用的 styles/properties 并引用它们。
<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>
您尝试实现的是 'alter' 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>
如果您想更改默认模板中不可用的属性,则必须创建自己的模板。