如何在.Net Maui iOS中使用渐变背景进行绑定?

qaxu7uf2  于 2023-07-01  发布在  iOS
关注(0)|答案(2)|浏览(129)

在过去的几天里,我一直试图让梯度在iOS上的.Net Maui中工作,但它似乎崩溃了。
它在Android中运行得很好。

<Grid HeightRequest="316" HorizontalOptions="Fill">
  <Grid.Background>
   <LinearGradientBrush EndPoint="0,1">
     <GradientStop Color="{Binding myStartColor}"
                   Offset="0.1" />
     <GradientStop Color="{Binding myEndColor}"
                   Offset="1.0" />
    </LinearGradientBrush>
  </Grid.Background>
</Grid>

现在,正如你在上面的例子中看到的,我正在使用绑定来设置GradientStop的color属性的颜色。这将导致应用程序崩溃。
为清晰起见,添加了viewModel

public class myDemoModel : BindableBaseObject
  {
    public Color myStartColor { get; set; }
    public Color myEndColor { get; set; }
  }

我已经用Grid,VerticalStackLayout,BoxView测试子它(还有一些问题我将在另一个线程中讨论)
他们的行为都是一样的/相似的。
以下是一些确实有效的方法

<Grid HeightRequest="316" HorizontalOptions="Fill">
  <Grid.Background>
   <LinearGradientBrush EndPoint="0,1">
     <GradientStop Color="Red"
                   Offset="0.1" />
     <GradientStop Color="Green"
                   Offset="1.0" />
    </LinearGradientBrush>
  </Grid.Background>
</Grid>

因此,给它一个静态的颜色值似乎工作得很好,除了BoxView(有额外的问题,我将在另一个线程中讨论)。
问题是我需要动态地改变颜色。

lb3vh1jj

lb3vh1jj1#

这不是FIX,而是在Microsoft修复问题之前的解决方案。
在我的模型中,我添加了一个BackgroundGradient属性

public class myDemoModel : BindableBaseObject
  {
    public Color myStartColor { get; set; }
    public Color myEndColor { get; set; }

    public LinearGradientBrush BackgroundGradient => CreateGradient();

    private LinearGradientBrush CreateGradient()
    {
      var gb = new LinearGradientBrush();
      if (myStartColor != null && myEndColor != null) {
        gb.EndPoint = new Point(0, 1);
        gb.GradientStops.Add(new GradientStop(myStartColor, 0.1f));
        gb.GradientStops.Add(new GradientStop(myEndColor, 1.0f));
      }
      return gb;
    }

  }

现在我不是绑定到xaml中的颜色,而是绑定到背景

<Grid HeightRequest="316" 
      HorizontalOptions="Fill" 
      Background="{Binding BackgroundGradient}">
 
</Grid>

我希望这对某人有帮助。

dl5txlt9

dl5txlt92#

在BoxView上将color属性设置为transparent也可以解决iOS上的崩溃问题。
因此下面的示例与原始代码相同,但添加了Color属性,并使用BoxView而不是Grid。

<BoxView HeightRequest="316" HorizontalOptions="Fill" Color="Transparent">
  <BoxView.Background>
   <LinearGradientBrush EndPoint="0,1">
     <GradientStop Color="{Binding myStartColor}"
                   Offset="0.1" />
     <GradientStop Color="{Binding myEndColor}"
                   Offset="1.0" />
    </LinearGradientBrush>
  </BoxView.Background>
</BoxView>

相关问题