标签: maui

我正在尝试在 MAUI 应用程序中使用本机 C++ 库,但无法使其在 MacOS/iOS 上运行

这里有一篇很棒的文章,描述了如何在 Xamarin/C# 中使用本机 C++ 库,我认为这会扩展到 MAUI:https: //learn.microsoft.com/en-us/xamarin/cross-platform/cpp /

我按照这些说明进行操作,并在这里整理了一个端到端的演示解决方案: https: //github.com/whodges/bindingsample。这确实需要您将 Visual Studio 连接到 MacBook 来构建完整的解决方案。

该示例本质上使用默认的 MAUI 模板,并对其进行了轻微修改,以便根据每个平台设置实际的“点击计数器”值并从本机库中检索。对于 Windows,这是一个 C++ DLL(效果很好)。对于 Android,这是一个 .so 库(效果很好)。对于 iOS,这是一个静态 .a 库,这就是我遇到麻烦的地方:当我尝试使用 iOS 模拟器启动这个应用程序时,它失败并出现 clang++ 错误,并且出现类似“无法提取来自 .../obj/Debug/net6.0-ios/iossimulator-x64/linker-cache/libCounteriOS.a 的本机库“libCounteriOS.a”。请确保本机库已正确嵌入到托管程序集中(如果该程序集是使用绑定项目构建的,本机库必须包含在项目中,并且其构建操作必须是“ObjcBindingNativeLibrary”)”。

我创建了一个 C# .NET iOS 绑定库项目(在我的示例中为 Counter.iOS),这应该捆绑 libCounteriOS.a,它是在编译 CounteriOS(一个 C++ 项目)时生成的。首先,当在 Windows 上使用 Visual Studio 构建 Counter.iOS 时,它无法在其“bin”文件夹中生成 Counter.resources 文件夹以及后续的“manifest”文件。当我使用 Visual Studio for Mac 时,生成这些文件。因此,我坚持使用 Visual Studio for Mac 来构建 iOS.Counter 项目(其他所有内容都是使用 Windows 上的 Visual Studio 构建的)。

无论如何,我仍然收到我描述的“无法提取本机库”错误。我尝试将 Counter.iOS 中库文件的“构建操作”设置为 ObjcBindingNativeLibrary,但这只会导致 Visual Studio for …

c++ static native ios maui

5
推荐指数
0
解决办法
605
查看次数

CollectionView 在调试中工作,但在 .NET MAUI 中的发布中不起作用

我有以下内容

<CollectionView Margin="5" ItemsSource="{Binding Subjects}">
    <CollectionView.ItemsLayout>
        <GridItemsLayout Orientation="Vertical" Span="2" />
    </CollectionView.ItemsLayout>
    <CollectionView.EmptyView>
        <ContentView>
            <Label Text="No subjects entered yet..." />
        </ContentView>
    </CollectionView.EmptyView>
    <CollectionView.ItemTemplate>
        <DataTemplate>
            <Border MaximumWidthRequest="300">
                <Border.StrokeShape>
                    <RoundRectangle CornerRadius="10" />
                </Border.StrokeShape>
                <Border.GestureRecognizers>
                    <TapGestureRecognizer Command="{Binding Source={RelativeSource AncestorType={x:Type vm:MainPageViewModel}}, Path=DeleteSubjectCommand}" CommandParameter="{Binding .}" />
                </Border.GestureRecognizers>
                <Label Margin="5" Text="{Binding .}" />
            </Border>
        </DataTemplate>
    </CollectionView.ItemTemplate>
</CollectionView>
Run Code Online (Sandbox Code Playgroud)

问题是,<Label Margin="5" Text="{Binding .}" />在我的 .NET MAUI Android 应用程序中,发布时的 是空白的,而在调试时,它已填充并且手势识别器可以工作。当我将项目添加到列表中时,会出现正确的项目数量,因此我认为上面突出显示的标签发生了一些情况。

我该如何解决这个问题?

xaml xamarin.forms maui

5
推荐指数
1
解决办法
794
查看次数

在 .NET MAUI 应用程序中的视图模型中设置图像源

在我的 .NET MAUI 应用程序中,我希望能够通过将图像源绑定到视图模型中的属性来设置图像源 - 如下所示:

public partial class MyViewModel : BaseViewModel
{
   [ObservableProperty]
   ImageSource myImageSource;

   void Init()
   {
        if(somevalue == "something")
           MyImageSource = ImageSource.FromFile("image_a.png");
        else
           MyImageSource = ImageSource.FromFile("image_b.png");
   }
}
Run Code Online (Sandbox Code Playgroud)

在我的 XAML 页面<我这样做:

<Image
   Source{Binding MyImageSource}
   HeightRequest="30"
   HorizontalOptions="Center"
   VerticalOptions="Center" />
Run Code Online (Sandbox Code Playgroud)

这不显示图像,但没有错误。在我的视图模型中,我也尝试过MyImageSource = ImageSource.FromResource("MyProject.Resources.Images.image_a.png");也不显示图像。

我要显示的图像位于Resources > Images文件夹中。

我在这里做错了什么?如何Resources通过我的视图模型将图像源设置为文件夹中的文件?

maui

5
推荐指数
1
解决办法
8009
查看次数

如何从视图模型显示弹出窗口。毛伊岛

我正在使用 Nuget CommunityToolkit.Maui.Views。我的毛伊岛应用程序我也使用 viewModels。现在我想通过 viewmodel 方法显示我的自定义对话框。但

this.ShowPopup(new DialogPopup());
Run Code Online (Sandbox Code Playgroud)

只能在 Page 对象上调用。

我可以将值 Page 分配给 viewModel 中的属性,但我不确定这是实现它的最佳选择:

private readonly MainViewModel _mainViewModel;
public MainPage(MainViewModel vm)
{
    InitializeComponent();
    BindingContext = vm;
    _mainViewModel = vm;
    _mainViewModel.Page = this;
}
Run Code Online (Sandbox Code Playgroud)

并在视图模型中

public Page Page { get; set; }
Run Code Online (Sandbox Code Playgroud)

Page.ShowPopup(new DialogPopup());
Run Code Online (Sandbox Code Playgroud)

ShowPopup 方法如下所示:

public static void ShowPopup<TPopup>(this Page page, TPopup popup) where TPopup : Popup {...}
Run Code Online (Sandbox Code Playgroud)

我应该如何实现它才能在我的视图模型中使用此 ShowPupup 方法?

我正在使用 Net 7.0 和依赖注入来初始化我的对象。

c# xamarin maui

5
推荐指数
1
解决办法
6531
查看次数

使用参数将依赖项注入到 ContentView(代码隐藏)中

在我的 .NET MAUI MauiProgram.cs 中,我注册了一个 ResourceManager 以及名为 MyContentView 的 ContentView 的代码隐藏(指的是 MyContentView.xaml.cs):

来自 MauiProgram.cs 的部分

...
var builder = MauiApp.CreateBuilder();
builder
    .UseMauiApp<App>()
    .UseMauiCommunityToolkit()
    .UseLocalizationResourceManager(settings =>
    {
        settings.RestoreLatestCulture(true);
        settings.AddResource(AppResources.ResourceManager);
    })
    .ConfigureFonts(fonts =>
    {
        fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
        fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
    });

builder.Services.AddTransient<MyItemInputControlView>();

builder.Services.AddTransient<MyContentPage>();
builder.Services.AddTransient<MyContentPageViewModel>(); 
Run Code Online (Sandbox Code Playgroud)

MyItemInputControlView.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
             xmlns:views="clr-namespace:MyApp.Pages.Views"
             xmlns:loc="clr-namespace:LocalizationResourceManager.Maui;assembly=LocalizationResourceManager.Maui"
             xmlns:viewModels="clr-namespace:MyApp.ViewModels"
             x:Class="MyApp.Pages.Views.MyItemInputControlView"
             x:Name="this">

        
    <StackLayout BindingContext="{x:Reference this}">
        <Grid Margin="20, 0, 20, 0">
            <Grid.Resources>
                <!--<Style TargetType="Entry">
                    <Setter Property="Padding" Value="2 1" />
                    <Setter Property="BorderBrush" Value="LightGray" />
                </Style>-->
            </Grid.Resources>
            
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" …
Run Code Online (Sandbox Code Playgroud)

maui contentview

5
推荐指数
1
解决办法
2069
查看次数

未为“CompileAppManifest”任务指定所需参数“DefaultSdkVersion”的值

我正在尝试在 PC Visual Studio 2022 上的 iPhone 上测试我的 .Net MAUI 应用程序,该应用程序与装有 xCode 并安装了所有内容的 Mac 配对。我的 iPhone 已连接到 Mac,并且我正在尝试将其部署为 iOS 远程设备。

构建失败并出现以下错误:

错误 MSB4044:未为“CompileAppManifest”任务提供所需参数“DefaultSdkVersion”的值。

错误发生在 Xamarin.Shared.targets 中:

<CompileSceneKitAssets
        SessionId="$(BuildSessionId)"
        AppBundleName="$(_AppBundleName)$(AppBundleExtension)"
        Condition="'$(IsMacEnabled)' == 'true'"
        ToolExe="$(CopySceneKitAssetsExe)"
        ToolPath="$(CopySceneKitAssetsPath)"
        SceneKitAssets="@(SceneKitAsset)"
        IntermediateOutputPath="$(DeviceSpecificIntermediateOutputPath)"
        TargetFrameworkMoniker="$(_ComputedTargetFrameworkMoniker)"
        ProjectDir="$(MSBuildProjectDirectory)"
        ResourcePrefix="$(_ResourcePrefix)"
        IsWatchApp="$(IsWatchApp)"
        SdkPlatform="$(_SdkPlatform)"
        SdkDevPath="$(_SdkDevPath)"
        SdkRoot="$(_SdkRoot)"
        SdkVersion="$(_SdkVersion)">
        <Output TaskParameter="BundleResources" ItemName="_BundleResourceWithLogicalName" />
Run Code Online (Sandbox Code Playgroud)

删除 bin 和 obj 文件夹没有帮助。

该应用程序在模拟器上成功运行。

缺什么?

iphone ios maui

5
推荐指数
1
解决办法
2047
查看次数

毛伊岛贝壳导航失败 - 罕见的复制品

我在使用 MAUI 应用程序时遇到问题,很少出现未处理的 NavigationFailed 异常。我有一个主视图,它导航到具有以下内容的辅助页面:

await Shell.Current.GoToAsync($"{nameof(AddCollectionPage)}", true, new Dictionary<string, object>
{
    {"Contracts", queryStringBuilder.ToString() }
});
Run Code Online (Sandbox Code Playgroud)

然后第二页中有一个按钮可以向后返回,使用以下命令:

await Shell.Current.GoToAsync("../");
Run Code Online (Sandbox Code Playgroud)

现在效果很好,1000 次中有 999 次可能没有问题……但应用程序崩溃的情况很少见。在调试时,它在 App.gics 中的 UnhandledException 点处中断,代码如下:

UnhandledException += (sender, e) =>
{
    if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();
};
Run Code Online (Sandbox Code Playgroud)

例外并不是那么有用。 在此输入图像描述

调用堆栈仅包含 4 个条目 - 其中 2 个是外部代码,1 个是我在 App.gics 中发布的位置,另一个是调用 shell 导航的行。

刚才就遇到了这个问题,在代码中我调用导航从辅助页面返回主页面的“../”。这种情况确实很少见,但频率足够高,非常烦人。

当我包装调用 GoToAsync 的行(这会导致 try catch 中崩溃并记录它捕获的异常)时,我得到以下信息(错误和堆栈跟踪)。其中的底线引用了我的代码中调用 GoToAsync 的部分,其他所有内容都是 MAUI 框架的内容。

System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.
   at WinRT.ExceptionHelpers.<ThrowExceptionForHR>g__Throw|20_0(Int32 hr)
   at …
Run Code Online (Sandbox Code Playgroud)

c# maui

5
推荐指数
1
解决办法
1037
查看次数

如何将 Google Admob 集成到 .NET MAUI 应用程序中?

我在 Android 上有一个 MAUI Blazor 应用程序,我想在其上使用 Google 广告。到目前为止,我找不到办法做到这一点。

我发现一些解决方案涉及使用 MauiMTAdmob 插件,但它对我不起作用。我遇到了很多错误,之后我什至无法从项目中卸载 nuget 包。

有人设法在最新版本的 MAUI 上使用 Admob 吗?

MAUI 上有对 admob 的官方支持吗?未来还会有吗?

admob maui maui-blazor

5
推荐指数
1
解决办法
956
查看次数

获得焦点时选择条目中的所有文本

在我的 .NET MAUI 应用程序中,我想在条目聚焦时选择整个文本,以便可以更快地进行输入,而无需删除初始输入。

因此,我添加了以下代码:

XAML

<Entry Text="{Binding Min, Mode=TwoWay}" Focused="Entry_Focused" />
Run Code Online (Sandbox Code Playgroud)

代码隐藏

private void Entry_Focused(object sender, FocusEventArgs e)
{
    var entry = sender as Entry;

    entry.CursorPosition = 0;
    entry.SelectionLength = entry.Text == null ? 0 : entry.Text.Length;
}
Run Code Online (Sandbox Code Playgroud)

在我的Pixel 5 - API 33 (Android 13.0 - API 33)模拟器中,当我用鼠标单击我的 Entry 时,它的行为就像这样。

在此输入图像描述

当我继续使用Tab(用户没有)时,它的行为正确,正如您在此处看到的那样

在此输入图像描述

解决此问题的正确方法是什么,以便当用户单击条目并设置焦点时它的行为类似于第二个屏幕截图?

maui

5
推荐指数
1
解决办法
1420
查看次数

.Net Maui - 调试器已附加到 [myapp].exe 但未配置

我正在开发一个 .net maui 应用程序/前端应用程序,今天随机开始收到错误“myapp.exe 中发生未处理的 win32 异常”。添加警告警报“调试器已附加到 myapp.exe,但未配置为调试此未处理的异常。要调试此异常,请分离当前调试器。” 该应用程序一整天都运行得很好,当时所做的唯一更改是创建一个新的视图模型。我尝试将更改恢复到工作时的先前状态,但这并没有解决问题。
更新:
我已经进一步调试并添加了调试异常的新图像。
异常图像在这里

补充笔记:

  • VS2022 & 该应用程序位于 .net6/core6 中。
  • 调试器类型设置已选择托管、本机和脚本(如下所示)。
  • 我尝试过禁用 JIT 调试器。

.net debugging exception maui

5
推荐指数
1
解决办法
1328
查看次数

标签 统计

maui ×10

c# ×2

ios ×2

.net ×1

admob ×1

c++ ×1

contentview ×1

debugging ×1

exception ×1

iphone ×1

maui-blazor ×1

native ×1

static ×1

xamarin ×1

xamarin.forms ×1

xaml ×1