有没有办法将所有包含文本的页面元素的默认文本颜色设置为特定的颜色?
我觉得每个包含文本的元素都需要设置“TextColor”属性没有任何意义。
谢谢!
有没有办法将所有包含文本的页面元素的默认文本颜色设置为特定的颜色?
我觉得每个包含文本的元素都需要设置“TextColor”属性没有任何意义。
谢谢!
您可以在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将添加一种更通用的处理样式的方式。
虽然这是一个老问题,但仍然有用。
在 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
自 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>`
您需要为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创建相同的内容。