2017-05-25 133 views
2

我有2个标签需要使用不同的字体来制作单个标签 “My Company(c)”(copywrite symbol)。 “我的公司”将是一个大字体,'(c)'是一个小字体。我无法让它们显示为单个标签。似乎有间距问题。我已经尝试了以下。Xamarin(XAML)如何并排放置2个标签

<StackLayout Grid.Row="1" Orientation="Horizontal"> 
        <Label 
         x:Name="lbCo" 
         Text="My Company" 
         Style="{DynamicResource LargeLabel}"/> 

        <Label 
         x:Name="lbcopywrite" 
         Text="©" 
         Margin="0,-7,0,0" 
         Style="{DynamicResource SmallLabel}"/> 
       </StackLayout> 

但现在看来,像“我公司(空格)(C)

任何想法如何可以使它看起来像“我的公司(C)”,总是在同一直线上,共同?

回答

3

还有另外一种方法,但你不能直接指定样式的文字,但你可以选择众多的字体选项。尽管如此,您仍然可以将Style设置为主标签。

<Label> 
    <Label.FormattedText> 
     <FormattedString> 
      <Span Text="Company" FontAttributes="Bold"/> 
      <Span Text=" ©" FontSize="Micro" /> 
     </FormattedString> 
    </Label.FormattedText> 
</Label> 

如果你想绑定,你需要创建一个Converter,它返回一个FormattedString,并分配给FormattedText。如果您想重复使用不同的样式,可以创建一个带参数的Converter。

<Label FormattedText="{Binding Text, Converter={StaticResource FormattedStringConverter}}" /> 
+0

很高兴知道,不知道你可以使用跨文本。下次会尝试。谢谢 – Jon

2

您可以在StackLayout指定Spacing属性:

<StackLayout Grid.Row="1" Orientation="Horizontal" Spacing="0"> 
    <Label x:Name="lbCo" 
      Text="My Company" 
      Style="{DynamicResource LargeLabel}"/> 

    <Label x:Name="lbcopywrite" 
      Text="©" 
      Margin="0,-7,0,0" 
      Style="{DynamicResource SmallLabel}"/> 
</StackLayout> 

默认情况下,该值是6

+0

最简单的解决方案 – Jon

1

您应该使用VerticalTextAlignment属性,并将其设置为中心。两者都应该将标签边距设置为0。

<StackLayout Grid.Row="1" Orientation="Horizontal"> 
    <Label 
     x:Name="lbCo" 
     Text="My Company" 
     VerticalTextAlignment="Center" 
     Style="{DynamicResource LargeLabel}"/> 
    <Label 
     x:Name="lbcopywrite" 
     Text="©" 
     VerticalTextAlignment="Center" 
     Style="{DynamicResource SmallLabel}"/> 
</StackLayout>