如何在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;
}

最后使用颜色作为BackgroundColorGrid

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

如何在 iOS 的 xamarin.forms 应用程序中设置应用程序的应用程序图标

Xamarin.Forms 在共享项目中设置图像源

无法在 UWP 中设置 SQLite 对象 - Xamarin Forms