MAUI中如何让带x:Key的Label样式继承默认样式?
MAUI中带Key的Label样式如何继承默认隐式样式?
问题场景
我为所有Label设置了默认隐式样式:
<Style TargetType="Label"> <Setter ... </Style>
另外定义了一个带x:Key的Label样式:
<Style x:Key="notForAll" TargetType="Label"> <Setter ... </Style>
当引用这个带Key的样式时:
<Label Style="{StaticResource notForAll}"/>
该Label只会应用notForAll的样式,不会继承之前设置的默认Label样式。
我希望notForAll样式基于默认Label样式,但不知道BasedOn属性应该填写什么值:
<Style x:Key="notForAll" TargetType="Label" BasedOn="{StaticResource ????????????}"> <Setter ... </Style>
之前在WPF中可以这样解决,但在MAUI中不生效:
<Style x:Key="NamedStyle" TargetType="Label" BasedOn="{StaticResource {x:Type Label}}"> <Setter ... </Style>
MAUI解决方案
在MAUI中,要让带Key的样式继承默认的隐式样式,有两种可靠的方式:
方式一:使用类型标记扩展(推荐)
确保你的XAML文件已声明x命名空间(MAUI项目默认已包含):
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
然后直接在BasedOn中引用控件类型作为资源键:
<Style x:Key="notForAll" TargetType="Label" BasedOn="{StaticResource {x:Type Label}}"> <Setter ... </Style>
如果此写法之前不生效,检查默认隐式样式的作用域是否覆盖当前样式(比如默认样式是否在App.xaml的ResourceDictionary中,或者当前页面的Resources里),资源查找是从当前元素向上逐级进行的。
方式二:显式为默认样式指定Key
如果方式一仍有问题,可以给默认样式添加显式Key,再让两个样式关联:
- 给默认样式设置Key:
<Style x:Key="DefaultLabelStyle" TargetType="Label"> <Setter ... </Style>
- 创建无Key的隐式样式,让所有Label默认应用这个带Key的样式:
<Style TargetType="Label" BasedOn="{StaticResource DefaultLabelStyle}"/>
- 让
notForAll样式基于DefaultLabelStyle:
<Style x:Key="notForAll" TargetType="Label" BasedOn="{StaticResource DefaultLabelStyle}"> <Setter ... </Style>
内容的提问来源于stack exchange,提问作者upcast
相关产品推荐
相关产品推荐

