SkiaSharp Canvas 按钮不起作用
SkiaSharp Canvas button doesn't work
我有一个 Xamrin Form
网格布局,如下所示。有一个SkiaSharp
canvas 渐变色。我需要在 canvas 中添加一个按钮来获得渐变背景。但是当我在 canvas 中添加按钮时,它不会呈现任何内容(按钮 x:Name="ClickMe2")。使用渐变背景渲染按钮的正确方法是什么?
XAML
<Grid x:Name="controlGrid">
<Grid.RowDefinitions>
<RowDefinition Height="200" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<views:SKCanvasView PaintSurface="OnSecondPainting" EnableTouchEvents="True" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" >
<Button x:Name="ClickMe2" Text="ClickMe 2" HeightRequest="50" VerticalOptions="Start" />
</views:SKCanvasView>
<Label Text="Bottom Left" Grid.Row="1" Grid.Column="0" />
<Button x:Name="ClickMe1" Text="ClickMe 1" Grid.Row="1" Grid.Column="1" HeightRequest="50" VerticalOptions="Start" />
</Grid>
C#
private void OnSecondPainting(object sender, SKPaintSurfaceEventArgs e)
{
var surface = e.Surface;
var canvas = surface.Canvas;
canvas.Clear(SKColors.White);
///GRADIENT--------------------------------------------------------------------
var colors = new SKColor[] { new SKColor(6, 107, 249), new SKColor(27, 162, 210), new SKColor(36, 182, 197) };
var shader = SKShader.CreateLinearGradient(new SKPoint(300, 0), new SKPoint(300, 600), colors, null, SKShaderTileMode.Clamp);
var paint = new SKPaint() { Shader = shader };
canvas.DrawPaint(paint);
}
这是因为 canvas 视图实际上不是布局 - 它是 View
。也就是说不支持children.
如果这确实是个问题,请随时在 GitHub 上提出问题:
https://github.com/mono/skiasharp/issues 我们可以在那里讨论这个问题,也可以从社区获得意见(例如更改或新观点)
如果您想将视图放在 canvas 之上,您可以使用 Grid
、RelativeLayout
或 AbsoluteLayout
:
<Grid>
<views:SKCanvasView />
<Button />
</Grid>
只要canvas是第一个child,其他children都会出现在它上面
我有一个 Xamrin Form
网格布局,如下所示。有一个SkiaSharp
canvas 渐变色。我需要在 canvas 中添加一个按钮来获得渐变背景。但是当我在 canvas 中添加按钮时,它不会呈现任何内容(按钮 x:Name="ClickMe2")。使用渐变背景渲染按钮的正确方法是什么?
XAML
<Grid x:Name="controlGrid">
<Grid.RowDefinitions>
<RowDefinition Height="200" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<views:SKCanvasView PaintSurface="OnSecondPainting" EnableTouchEvents="True" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" >
<Button x:Name="ClickMe2" Text="ClickMe 2" HeightRequest="50" VerticalOptions="Start" />
</views:SKCanvasView>
<Label Text="Bottom Left" Grid.Row="1" Grid.Column="0" />
<Button x:Name="ClickMe1" Text="ClickMe 1" Grid.Row="1" Grid.Column="1" HeightRequest="50" VerticalOptions="Start" />
</Grid>
C#
private void OnSecondPainting(object sender, SKPaintSurfaceEventArgs e)
{
var surface = e.Surface;
var canvas = surface.Canvas;
canvas.Clear(SKColors.White);
///GRADIENT--------------------------------------------------------------------
var colors = new SKColor[] { new SKColor(6, 107, 249), new SKColor(27, 162, 210), new SKColor(36, 182, 197) };
var shader = SKShader.CreateLinearGradient(new SKPoint(300, 0), new SKPoint(300, 600), colors, null, SKShaderTileMode.Clamp);
var paint = new SKPaint() { Shader = shader };
canvas.DrawPaint(paint);
}
这是因为 canvas 视图实际上不是布局 - 它是 View
。也就是说不支持children.
如果这确实是个问题,请随时在 GitHub 上提出问题: https://github.com/mono/skiasharp/issues 我们可以在那里讨论这个问题,也可以从社区获得意见(例如更改或新观点)
如果您想将视图放在 canvas 之上,您可以使用 Grid
、RelativeLayout
或 AbsoluteLayout
:
<Grid>
<views:SKCanvasView />
<Button />
</Grid>
只要canvas是第一个child,其他children都会出现在它上面