小编Tan*_*ere的帖子

在 .NET MAUI 中显示 Google Ads/AdMob

我很清楚 .NET MAUI 只是 Xamarin.Forms 的下一代实现,因此大多数 Xamarin.Forms 指南应该适用于 .NET MAUI(我猜)。

有人让 Admob 在 .NET MAUI 中工作吗?如果是的话,如何实现?我只需要指明正确的方向,我就会上路

admob maui .net-maui

12
推荐指数
1
解决办法
4150
查看次数

.NET MAUI/Xamarin.Forms 中的实体框架核心

我完成了 .NET MAUI 应用程序的编码,并且在调试模式下一切正常。尽管我在 .NET MAUI 上使用它,但 Xamarin 的 Entity Framework Core 满足了我所有的数据持久性需求。

我已经制作了 apk 文件并对其进行测试以查看是否一切正常,但结果发现数据库并未创建。一旦我尝试执行数据库操作,我的应用程序就会崩溃。所以我不确定 EF Core 与 .NET MAUI 是否不兼容(但它在调试中运行良好),或者我错过了一些东西。

我按照此处访问的教程进行操作https://learn.microsoft.com/en-us/ef/core/get-started/xamarin下面是我的 DataContext 文件

数据上下文.cs

using Microsoft.EntityFrameworkCore;
using MedbaseRec.Models;

namespace MedbaseRec.Utils
{
    public class DataContext : DbContext
    {
        public DbSet<QuestionPack> QuestionPacks { get; set; }
        public DbSet<Question> Questions { get; set; }

        public DataContext()
        {
            SQLitePCL.Batteries_V2.Init();

            Database.EnsureCreated();
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            string dbPath = Path.Combine(FileSystem.AppDataDirectory, "medbaseapplica.db3");
            optionsBuilder.UseSqlite($"Filename={dbPath}");
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

sqlite xamarin.forms entity-framework-core maui .net-maui

12
推荐指数
1
解决办法
1万
查看次数

为什么 Microsoft 同时拥有 Avalonia UI 和 .NET MAUI?

.Net Conf 目前正在进行中,我了解到了名为 Avalonia UI 的东西。(我使用 .NET MAUI)经过一些研究,Avalonia UI 主要是一个桌面 UI 框架,现在支持 Android 和 iOS。

既然它们都是 dotNet 基础项目,为什么它们要开发两个不同的多平台框架?由于它们都使用 XAML 和 C# 代码,因此两者相比是否有明显的优势?

.net c# avaloniaui maui

9
推荐指数
1
解决办法
5702
查看次数

.NET MAUI 中的 Shell 导航到带有底部选项卡的页面

在登录流程中,登录页面通常没有构成应用程序主要流程的底部选项卡。

AppShell.xaml

 <TabBar>
        <ShellContent Title="Home"
             Icon="home.png" 
                      ContentTemplate="{DataTemplate local:HomePage}"/>
        <ShellContent Title="Articles"
                          Icon="articles.png"
                          ContentTemplate="{DataTemplate local:ArticlesPage}" />
    </TabBar>
Run Code Online (Sandbox Code Playgroud)

因此,如果登录成功,我尝试从登录页面导航到作为 Shell 中 TabBar 的一部分的主页。问题是 Shell 然后导航到主页,就好像它是一个独立的页面,没有 TabBar。我假设答案在于导航到 TabBar 部分本身,我不知道。

maui .net-maui

7
推荐指数
1
解决办法
7927
查看次数

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 中请求权限

再会。

在我的所有应用程序中,请求用户权限不会在 Android 中显示权限弹出窗口。

我正在使用 .NET MAUI CommunityToolkit 中的 FileSaver,据我了解,该SaveAsync方法应该请求许可并保存到磁盘。

async Task SaveDocument(MemoryStream memoryStream)
{
    try
    {
        //var fileLocation = await FileSaver.Default.SaveAsync($"{Guid.NewGuid()}.docx", memoryStream, new CancellationToken());
        var someLocation = await FileSaver.SaveAsync($"{Guid.NewGuid()}.docx", memoryStream, new CancellationToken());  
        await Toast.Make($"File is saved: {someLocation}").Show();
    }
    catch (Exception ex)
    {
        await Toast.Make($"File is not saved, {ex.Message}").Show();
    }
}
Run Code Online (Sandbox Code Playgroud)

catch 语句遇到错误消息权限未授予。

这是我的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true">
        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
    </application>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" …
Run Code Online (Sandbox Code Playgroud)

c# maui maui-community-toolkit

4
推荐指数
1
解决办法
4583
查看次数

使用 CommunityToolkit.MVVM 将参数从 ViewModel 传递到 .NET MAUI 中的 ViewModel

我的接收 Viewmodel (QuestionsPageViewModel) 在通过 Shell 导航传递 TopidId 后未收到 TopidId,如下面的代码所示。我已将断点放置在 QuestionsPageViewModel 中的 LoadQuestions 方法处。调用时TopicId为null。我缺少什么?

主页视图模型

//This is in a command executed after clicking a button. And this is working fine
await Shell.Current.GoToAsync($"{nameof(QuestionsPage)}?TopicId={pack.TopicId}");
Run Code Online (Sandbox Code Playgroud)

问题页面视图模型

[INotifyPropertyChanged]
[QueryProperty(nameof(TopicId), nameof(TopicId))]
    public partial class QuestionsPageViewModel
    {
        public ObservableRangeCollection<Question> QuestionsList { get; set; } = new();
        [ObservableProperty]
        string? title;

        [ObservableProperty]
        public string topicId;

        public QuestionsPageViewModel()
        {
            LoadQuestions();
        }

        async void LoadQuestions()
        {
            Title = Utilities.ConvertTopicIdToString(short.Parse(TopicId));

            try
            {
                using (var context = new DataContext())
                {
                    QuestionPack questionPack = …
Run Code Online (Sandbox Code Playgroud)

maui .net-maui

2
推荐指数
1
解决办法
5608
查看次数

在 .NET MAUI/Xamarin.Forms 中使用 MVVM 的手势识别器

我想将点击手势识别器与 ICommand 一起使用,这意味着使用 ViewModel 而不是后面的代码。

我正在通过后面的代码使手势识别器工作,如下所示

主页.xaml

<CollectionView Margin="10,0,10,0"
                            ItemSizingStrategy="MeasureAllItems"
                            ItemsLayout="VerticalList"
                            VerticalScrollBarVisibility="Always"
                            ItemsSource="{Binding QuestionPacks}">
            <CollectionView.ItemTemplate>
                <DataTemplate x:DataType="model:QuestionPack">
                    <Frame Margin="5"
                           CornerRadius="10">
                        <Frame.GestureRecognizers>
                            <TapGestureRecognizer 
                                Tapped="TapGestureRecognizer_Tapped"/>
                            <TapGestureRecognizer 
                                NumberOfTapsRequired="2"
                                Tapped="TapGestureRecognizer_Tapped_1"/>
                        </Frame.GestureRecognizers>
                        <VerticalStackLayout Margin="5">
                        
                            <Label Text="{Binding Topic}" />
                            <Label Text="{Binding TopicId}" />
                        </VerticalStackLayout>
                    </Frame>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
Run Code Online (Sandbox Code Playgroud)

请注意x:DataType=model:QuestionPack数据模板中的 。

主页.xaml.cs

private async void TapGestureRecognizer_Tapped(object sender, EventArgs e)
    {

        var selectedItem = ((VisualElement)sender).BindingContext as QuestionPack;

        if (selectedItem == null)
            return;


        LoadingQuestions.IsRunning = true;
        LoadingQuestions.IsEnabled = true;

        await Shell.Current.GoToAsync($"{nameof(QuestionsPage)}?topicSelected={selectedItem.TopicId}");

        LoadingQuestions.IsRunning = false;
        LoadingQuestions.IsEnabled = false; …
Run Code Online (Sandbox Code Playgroud)

c# xamarin xamarin.forms maui .net-maui

0
推荐指数
1
解决办法
7670
查看次数