如何在Xamarin Forms中设置默认的非透明背景?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Xamarin Forms中设置默认的非透明背景?相关的知识,希望对你有一定的参考价值。
我刚开始使用Xamarin Forms进行开发并面临一个相当简单的问题,但我找不到解决方案: 我有一些UI元素堆叠在一起,如下所示:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Label x:Name="LabelLeft" Grid.Column="0" Text="LEFT" />
<Label x:Name="LabelRight" Grid.Column="2" Text="RIGHT" />
<Grid x:Name="GridMain" Grid.Column="0" Grid.ColumnSpan="3" Margin="0"
BackgroundColor="Default">
<Grid.GestureRecognizers>
<PanGestureRecognizer PanUpdated="PanGestureRecognizer_OnPanUpdated"/>
</Grid.GestureRecognizers>
<Grid Margin="10">
<Label Text="MAIN"/>
</Grid>
</Grid>
</Grid>
然后可以“淘汰”GridMain
以“显示”两个标签。
但现在我遇到的问题是网格背景颜色Default
不是目标系统的默认背景颜色,但Transparent
- >我可以“看到”网格下面的标签。此外,当我单击/触摸网格内的字符串而不是网格内的任何位置时,我只能平移网格。
如何设置背景以使用“非透明”默认背景?
我不想使用硬编码的White
,因为我也想支持例如UWP的黑暗主题,它应该是Black
。
现在我用Accent
继续工作,但这不是我真正想要的。
答案
作为一种解决方法,您可以创建一个依赖项服务,该服务将返回您要用于给定操作系统的颜色。
首先在共享项目中创建一个IColorService
接口:
public interface IColorService
{
Color SystemBackgroundColor { get; }
}
然后在每个平台上实现它:
[assembly: Xamarin.Forms.Dependency(typeof(ColorService))]
namespace App.UWP
{
public class ColorService : IColorService
{
public Color SystemBackgroundColor =>
Application.Current.RequestedTheme == ApplicationTheme.Dark ?
Color.Black : Color.White;
}
}
接下来,在共享项目中创建一个静态类,以便轻松访问颜色:
public static class Colors
{
public static Color SystemBackgroundColor =>
DependencyService.Get<IColorService>().SystemBackgroundColor;
}
最后使用颜色作为BackgroundColor
的Grid
:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:App"
x:Class="App.MainPage">
<Grid BackgroundColor="{x:Static local:Colors.SystemBackgroundColor}" />
</Grid>
</ContentPage>
注意添加的xmlns:local
指向定义了Colors
类的命名空间。
以上是关于如何在Xamarin Forms中设置默认的非透明背景?的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms:有没有办法在xaml中设置派生样式的默认字体(系列)?
如何在Xamarin Forms中设置自动日/夜模式谷歌地图
如何在 Xamarin Forms 中以适当的图像比例在 UWP 中设置 SpashScreen?