如何通过在Xamarin xaml{GroupStyle}中添加样式来定义ResourceDictionary

如何通过在Xamarin xaml{GroupStyle}中添加样式来定义ResourceDictionary,xaml,xamarin,styles,groupstyle,Xaml,Xamarin,Styles,Groupstyle,我正在尝试做一些类似于将atribute设置为网格内的所有标签的事情 我知道怎么做,就这么做: <Grid RowSpacing="2" Padding="2,0,2,0"> <Grid.Resources> <ResourceDictionary> <Style BasedOn="{StaticResource Font-Awesome}" TargetType="Label"/> &l

我正在尝试做一些类似于将atribute设置为网格内的所有标签的事情

我知道怎么做,就这么做:

<Grid RowSpacing="2" Padding="2,0,2,0">
    <Grid.Resources>
       <ResourceDictionary>
            <Style BasedOn="{StaticResource Font-Awesome}" TargetType="Label"/>
       </ResourceDictionary>
    </Grid.Resources>
        <Label Text="31 &#xf083;" Grid.Column="0" TextColor="#2764B5" XAlign="Start"/>

        <Label Text="91 &#xf083;" Grid.Column="1" TextColor="#A0A1A2" XAlign="Center"/>

        <Label Text="12 &#xf083;" Grid.Column="2" TextColor="#A0A1A2" XAlign="End"/>
</Grid>

但它既丑陋又多余

我想做像这样的事情

<Grid RowSpacing="2" Padding="2,0,2,0" Style="{StaticResource grd-actions}">
    <Label Text="31 &#xf083;" Grid.Column="0" TextColor="#2764B5" XAlign="Start"/>

    <Label Text="91 &#xf083;" Grid.Column="1" TextColor="#A0A1A2" XAlign="Center"/>

    <Label Text="Compartilhar &#xf083;" Grid.Column="2" TextColor="#A0A1A2" XAlign="End"/>
</Grid>

应用程序上的静态资源包括网格的ResourceDictionary,类似于:

<Style x:Key="gd-actions" TargetType="Grid">
    <Setter Property="Resources">
      <Setter.Value>
        <ResourceDictionary>
          <Style BasedOn="{StaticResource Font-Awesome}" TargetType="Label"/>
        </ResourceDictionary>
      </Setter.Value>
    </Setter>
</Style>

我尝试了很多方法,但总是会有例外


有人能帮我吗?

我想最干净的方法是使用
显式样式
全局资源
。在
应用程序资源
中声明该
标签的样式,然后在标签中添加
样式属性

应用程序:

<Application xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="xforms_test.App">
    <Application.Resources>
        <ResourceDictionary>
            <Style x:Key="labelAquaStyle" TargetType="Label">
                <Setter Property="HorizontalOptions" Value="Center" />
                <Setter Property="TextColor" Value="Aqua" />
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>

在您的页面中:

<Grid RowSpacing="2" Padding="2,0,2,0">
    <Label Grid.Column="0" Text="These labels" Style="{StaticResource labelAquaStyle}" />
    <Label Grid.Column="1" Text="are demonstrating" Style="{StaticResource labelAquaStyle}" />
    <Label Grid.Column="2" Text="explicit styles" Style="{StaticResource labelAquaStyle}" />
</Grid>


您希望使用类似CSS的XAML样式,但这并不是一个完美的类比。你的第一个例子(你不喜欢的)确实是解决这个问题的正确方法。我明白了,所以我不能将一个样式定位到一个网格,然后像CSS那样更改里面的所有项目?将所有样式分组,使其仅在视图元素内部作为隐式影响,这将是非常好的。我真的不喜欢将静态资源调用到everythingStyles,因为它不会传播到子元素<代码>绑定上下文
传播,资源字典内容的可用性沿着元素树传播,而不是样式。最终这是因为
样式中的
Setter
元素需要知道目标元素类型是什么,因为它将在那里查找依赖项属性定义。CSS的工作方式完全不同。但是在每个元素上调用样式是非常无聊/多余的。你没有任何方法来制作类似CSS样式的东西吗?如果样式是全局的(你想在你的应用程序的每个标签上使用该样式),你可以去掉每个元素上的style属性,否则就没有其他方法了。