如何通过Xamarin XAML {} GroupStyle添加样式定义的ResourceDictionary

问题描述:

我试图制造类似组属性附加伤害到所有标签网格如何通过Xamarin XAML {} GroupStyle添加样式定义的ResourceDictionary

我知道如何使这里面,只是这样做:

<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> 

但它的丑陋和冗余

我想要做的smetthing像

<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> 

而在App静态资源包括资源字典网格,是这样的:

<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> 

我已经是有很多方法试图但它的跳投抛出某种异常!

有人可以帮我吗?

+0

您想使用XAML样式像CSS - 但这不是一个完美的模拟。你的第一个例子(你不喜欢)确实是这样的正确方法。 –

+0

我明白了,所以我无法将样式定位到网格并像CSS一样更改所有项目?将所有样式分组为仅隐含在视图元素内部将是非常好的。我真的不喜欢调用静态资源给所有的东西 –

+1

样式不会传播到子元素。 'BindingContext'传播,并且资源字典的内容的可用性沿元素树向下传播,但不是样式。最终,这是因为'Style'中的'Setter'元素需要知道目标元素类型是什么,因为这是它将查找依赖项属性定义的地方。 CSS完全不同。 –

我想最干净的方法是使用Explicit StylesGlobal Resources。声明为Labels的风格Application Resources,然后在你的标签只是添加Style Property

应用:

<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> 
+0

但是在每个元素上调用样式都很无聊/多余,没有办法像CSS样式一样? –

+1

如果样式是Global(你想在你的应用程序的每个Label中使用该样式),你可以去除每个元素的Style属性,否则没有其他方法。 – jzeferino