Xamarin Forms - 设置默认的文本颜色

8

有没有办法将所有包含文本的页面元素的默认文本颜色设置为特定的颜色?

我觉得每个包含文本的元素都需要设置“TextColor”属性没有任何意义。

谢谢!


并没有一个包含Text属性的所有可视元素的基类。因此,您需要为每个要创建的可视元素创建一个单独的隐式样式。 - Armin Rasoulian
4个回答

10

您可以在App.xaml中设置包含文本的元素的样式。这将为您应用程序中使用的所有标签、按钮等设置TextColor:

    <Style TargetType="Label">
        <Setter Property="TextColor" Value="Red" />
    </Style>

    <Style TargetType="Button">
        <Setter Property="TextColor" Value="Red" />
    </Style>

    <Style TargetType="Entry">
        <Setter Property="TextColor" Value="Red" />
    </Style>

    <Style TargetType="Editor">
        <Setter Property="TextColor" Value="Red" />
    </Style>
...

不幸的是,您将不得不为所有包含文本的可视元素添加一个新的样式标签。我曾经在一段时间内一直在寻找更清晰的定义所有具有文本元素样式的方法。但这似乎是最干净的方法...

希望Xamarin.Forms将添加一种更通用的处理样式的方式。


Xamarin.Forms有App.xaml文件吗?我的项目肯定没有,尝试添加一个只会破坏一切。 - BlueRaja - Danny Pflughoeft
是的,你的核心(共享)项目有一个App.xaml文件。也许你把Xamarin.Forms和本地的Xamarin.Android/Xamarin.iOS项目搞混了? - DenseCrab

0

虽然这是一个老问题,但仍然有用。

App.xaml 中定义了一个名为 BLabel 的 Label 样式。

<Style x:Key="BLabel" TargetType="Label">
        <Setter Property="TextColor"  Value="#A7ADB1" />
        <Setter Property="HorizontalOptions" Value="Start" />
        <Setter Property="VerticalOptions" Value="Center" />
    </Style>

您可以像这样使用它,在MainPage.xaml中。

  <Label
   Grid.Row="4"
   Grid.Column="1"
   Style="{StaticResource BLabel}"
   Text="BB 3" />

但是你还可以添加更多内容,例如:

  <Setter Property="WidthRequest" Value="150" />
        <Setter Property="HeightRequest" Value="40" />
        <Setter Property="FontSize" Value="Small" />
        <Setter Property="BorderWidth" Value="1" />
        <Setter Property="BackgroundColor" Value="Red" />
        <Setter Property="HorizontalOptions" Value="Center" />
        <Setter Property="TextTransform" Value="None" />

还有更多……

不仅适用于标签,还适用于按钮等。

这是一个关于StaticResource的示例,但您也可以使用DynamicResource来更改颜色等。

https://www.youtube.com/watch?v=Se0yF5JXk70&ab_channel=JamesMontemagno


0

自 Xamarin Forms 2.6.0 起,您可以使用 CSS 样式。这使您可以全局设置元素或特定的 CSS 类的样式。

将文件 styles.css 添加到文件夹 YouProject.Shared > Assets 中,并使用以下内容。(请注意 ^ 符号。它选择具有此基类的任何元素)

^Label {
    color: red;
}

^Entry {
    color: red;
}

^Button {
    color: red;
}

将资源添加到全局视图中(例如,您使用MasterDetailPage),以加载CSS文件:

<MasterDetailPage.Resources>
    <StyleSheet Source="/Assets/styles.css" />
</MasterDetailPage.Resources>`

-2

您需要为Android和iOS中的Label和Entry或任何其他控件创建自定义渲染器,并可以直接在其中应用颜色。
[assembly: ExportRenderer(typeof(Label), typeof(IOSLabelRenderer))] namespace test { public class IOSLabelRenderer : LabelRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Label> e) { base.OnElementChanged(e); Control.TextColor = UIColor.Brown; } } } 您也可以为Android创建相同的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接