.NET MAUI SkiaSharp SKCanvasView 在大小 > 0 时崩溃

问题描述 投票:0回答:1

这是我的第一个 .NET Maui 应用程序,我希望这是提问的正确地方。

现在,我在 Windows 11 上的 .NET 8 中使用 SkiaSharp(版本 3.0.0-preview.4.1)的 SKCanvasView 时遇到问题。 尽管在异常设置中打开了all异常,但一旦 SkCanvasView 的宽度和高度都更改为值 > 0,我的调试器就会因未处理的异常而崩溃。 我尝试了布局/宽度/高度请求/代码隐藏与 XAML 定义的多种不同组合,但现在我完全一无所知。我很想了解导致崩溃的问题,以防止现在和将来发生崩溃,但我也非常感谢 SKCanvasView 的解决方法。

在 MauiProgram.cs 中注册了 SkiaSharp:

 builder.UseMauiApp<App>().UseMauiCommunityToolkit().UseSkiaSharp()

这是应使用 SKCanvasView 的精简 XAML 代码:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:skia="clr-namespace:SkiaSharp.Views.Maui.Controls;assembly=SkiaSharp.Views.Maui.Controls"
             x:Class="FitnessApp.Views.SubPage1">
    <AbsoluteLayout x:Name="LayoutHelperView" BackgroundColor="LightBlue">
        <skia:SKCanvasView x:Name="skiaView" BackgroundColor="White"/>
        <Button x:Name="TestBtn" Text="Test SkiaView" Clicked="OnTestBtnClicked" />
    </AbsoluteLayout>
</ContentPage>

这就是隐藏代码:

using FitnessApp.ViewModels;

namespace FitnessApp.Views;

public partial class SubPage1 : ContentPage
{
    public SubPage1(SubPage1ViewModel vm) {
        InitializeComponent();
        BindingContext = vm; 
    }

    private void OnTestBtnClicked(object sender, EventArgs e) {
        if (skiaView.Width == 0)
            skiaView.WidthRequest = 100;
        else
            skiaView.HeightRequest = 100;
    }
}

此外,在我的最小示例中,(子)页面有一个视图模型,我使用 App-Shell 导航到子页面,并通过服务进行依赖注入来实例化模型视图和页面。会不会也有这个错误呢?但是当我删除 SkCanvasView 时,一切都会按预期进行。哦,更新后我收到了新的警告,例如“类‘SubPage1ViewModel’实现了 WinRT 接口,但未标记为部分。如果通过 WinRT ABI 传递,则应将类型标记为部分以进行修剪和 AOT 兼容性。” 我很感激每一个提示。

.net maui skiasharp skia
1个回答
0
投票

我也遇到过这种情况,但仅限于最新的 Visual Studio 2022 17.11.5。它在 vs2022 17.11.2 上运行良好,我没有测试中间的版本。就我而言,只有在设置 HeightRequest 时才会发生这种情况。设置 WidthRequest 不会导致崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.