Xamarin表示隐式/显式样式...继承

时间:2017-01-11 19:25:33

标签: xaml xamarin.forms

我试图将Xamarin(XAML)样式想象成CSS并发现它们不完全相同。例如,如果我希望所有标签都是白色的,但的某些标签是粗体,从逻辑上讲,我认为这样可行。

    <ResourceDictionary>
        <Style TargetType="Label">
            <Setter Property="TextColor" Value="White" />
        </Style>
        <Style x:Key="LargeLabel" TargetType="Label">
            <Setter Property="FontAttributes" Value="Bold" />
        </Style>
    </ResourceDictionary>

并在页面中......

    <Label Text="Good Morning David!" Style="{StaticResource LargeLabel}" />

然而,这给了我一个粗体黑色标签。我希望它会变成白色。

因此经过一些研究后,有人建议使用BasedOn属性可以提供帮助。该技术是创建隐式样式所基于的显式样式。这样就可以使所有标签变白。然后进一步明确的样式可以基于同一个父母。

    <ResourceDictionary>
        <Style TargetType="Label" x:Key="DefaultLabelStyle">
            <Setter Property="TextColor" Value="White" />
        </Style>
        <Style x:Key="LargeLabel" TargetType="Label" BasedOn="DefaultLabelStyle">
            <Setter Property="FontAttributes" Value="Bold" />
        </Style>
        <Style TargetType="Label" BasedOn="DefaultLabelStyle" />
    </ResourceDictionary>

并在页面中同样的事情......

    <Label Text="Good Morning David!" Style="{StaticResource LargeLabel}" />

然而,仍然会产生粗体黑色标签而不是粗体白色标签。

有没有办法让这个工作在XAML / Xamarin Forms中?

1 个答案:

答案 0 :(得分:1)

BasedOn必须是StaticResourceXamarin Documentation

这就是我在项目中的表现:

<ResourceDictionary>
    <Style TargetType="Label" x:Key="DefaultLabelStyle">
        <Setter Property="TextColor" Value="White" />
    </Style>
    <Style x:Key="LargeLabel" TargetType="Label" BasedOn="{StaticResource DefaultLabelStyle}>
        <Setter Property="FontAttributes" Value="Bold" />
    </Style>
</ResourceDictionary>

My working source code example