所以我正在学习 xamarin 表单课程,但我正在对其进行调整以与 .net Maui 一起使用。到目前为止,它是一个基本的应用程序,仅构建了弹出外壳。
作者使用的是 autofac,我以前从未听说过或使用过。我按照示例进行操作并得到运行时异常:
Autofac.Core.Activators.Reflection.NoConstructorsFoundException:“找不到类型‘MauiApp4.Resource+Xml’的可访问构造函数。”
我不知道这意味着什么,也不知道如何继续:叹息
(我认为它试图说它无法访问某些东西?我也怀疑与 IContainer 有关?)
哦它
当我尝试在 Visual Studio 2022 社区版的 Android Pixel 5.0 API 30 Android 模拟器上构建和运行应用程序时,会发生这种情况。
它似乎在 Container = builder.Build(); 行崩溃
Autofac使用nuget加载,版本为6.3.0
我不知道我使用的是哪个版本的 .net 或 maui,但它是最新的(我如何获取此信息?)
这是当前(适用?)代码:(它也在我的 github 存储库上https://github.com/gfmoore/MauiApp4B.App/tree/master)
应用程序.xaml.cs
using System.Reflection;
using Autofac;
using IContainer = Autofac.IContainer;
namespace MauiApp4;
public partial class App : Application
{
public static IContainer Container;
public App()
{
InitializeComponent();
//class used for registration
var builder = new ContainerBuilder();
//scan and register all …Run Code Online (Sandbox Code Playgroud) 我面临的问题是 iOS 上的 MAUI 应用程序启动比 Android 或 Windows 上慢得多。
部署是使用 Visual Studio 版本 17.3.0 Preview 1.1 完成的,我尝试创建和部署一个新项目,而不进行任何添加。
iOS 上的启动(iPhone、iPad 已更新至最新操作系统版本) > 10 秒
Android < 2 秒
Windows < 2 秒
找不到与此相关的任何资源。
使用 Visual Studio 17.2 构建和部署的 PS Xamarin Forms 普通应用程序速度更快,在相同设备上不到 4 秒。
我的接收 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) 我想在我的应用程序中显示一些 gif 动画图像。我用来使用 Xamarin.Forms 执行此操作的库是 Xamarin.FFImageLoading.Svg.Forms。现在我们正在将应用程序迁移到 .net MAUI,我看到 MAUI 文档说它支持 GIF 文件。我尝试了一个示例,但没有成功。
我在以下链接中看到了与 gif 相关的错误和解决方法,并且我也尝试了它,但对我来说 gif 动画仍然无法正常工作。
https://github.com/dotnet/maui/issues/5034
我的代码位于公共存储库 github 上。
https://github.com/rynjas/GifMauiSample
如果您能帮助我解决这个问题,我将不胜感激。
重现该问题的步骤如下:
<Image Source="giphy.gif" HeightRequest="200" HorizontalOptions="Center" />
Run Code Online (Sandbox Code Playgroud)
<MauiImage Include="Resources\Images\*" />
<MauiImage Update="Resources\Images\*.gif" Resize="False" />
Run Code Online (Sandbox Code Playgroud)
问题仍然没有解决。
.Net MAUI 新手,正在将 CommunityToolkit.Mvvm 版本 8.0.0 与 Microsoft Visual Studio Community 2022(64 位)一起使用 - 当前版本 17.3.3
在我的 XAML 中,我有一个按钮:
<Button
Text="Add"
Command="{Binding data_addCommand}"
/>
Run Code Online (Sandbox Code Playgroud)
在我的 ViewModel 中,我有以下方法:
[RelayCommand]
private void data_add()
{
}
Run Code Online (Sandbox Code Playgroud)
当我构建时,编译器失败并显示以下内容:
Error CS0102 The type '[my_viewmodel_name]' already contains a definition for 'data_addCommand'
Run Code Online (Sandbox Code Playgroud)
然而,出于无奈,我将 XML 更改为:
<Button
Text="Add"
Command="{Binding Data_addCommand}"
/>
Run Code Online (Sandbox Code Playgroud)
...在我的 ViewModel 中:
[RelayCommand]
private void Data_add()
{
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是 Binding 命令中的方法名称和 ViewModel 中的方法名称以大写“D”开头,而不是小写“d”。
当我构建时,它成功完成!- ?? -- 我是否错过了文档中规定 [RelayCommand] 的方法名称必须以大写字母开头的内容?
我记得当使用 [ObservableProperty] 属性时,生成的属性将自动使用 UpperCamelCase 格式作为其名称。但是,我不记得看到过任何有关 [RelayCommand] 的内容。我假设情况就是这样(请原谅双关语),并且 …
我有一个带有 blazor 的毛伊岛应用程序,我正在创建一个自定义标题栏。
我即将关闭 maui 应用程序,在 blazor 上使用Application.Current.Quit();
现在我怎样才能最小化和移动毛伊岛应用程序
我的代码 Blazor
private void MoveWindow()
{
}
private void MinimizeWindow()
{
}
private void CloseWindow() {
Application.Current.Quit();
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 .NET Maui 制作一些绘图的东西。我已阅读文档,现在我可以通过命令绘制形状。但我不知道如何使用触摸事件(用手指绘图)来做到这一点。你知道我该怎么做吗?您知道这方面的任何指南或文档吗?我应该读什么?
我\xc2\xb4m 在 .net maui 中开发一个应用程序,我有一个问题,但我没有通过浏览回答自己。\n我正在尝试将阴影应用到边框,并且以下代码完美运行。
\n <Border \n Style="{StaticResource light-theme-border}"\n Grid.Column="1"\n Grid.Row="3"\n Grid.ColumnSpan="7">\n <Border.Shadow>\n <Shadow \n Brush="red"\n Offset="1,11"\n Radius="20"\n Opacity="0.25"/>\n </Border.Shadow>\n </Border>\nRun Code Online (Sandbox Code Playgroud)\n但是当我直接在边框属性内写入阴影时,它会捕获该属性,但我不知道如何转储[画笔、偏移、半径和不透明度]信息:
\n <Border \n Style="{StaticResource light-theme-border}"\n Grid.Column="1"\n Grid.Row="3"\n Grid.ColumnSpan="7"\n Shadow="???????????????????????????">\n </Border>\nRun Code Online (Sandbox Code Playgroud)\n 我有一个使用 shell 弹出窗口的应用程序。当我添加弹出按钮时,它会自动创建一个图标,如下图所示:
但是,当我关闭 Android 深色主题时:
弹出图标仍然是白色的,因此很难看到:
我正在使用 AppThemeBinding 根据用户选择的系统主题自动相应地设置应用程序主题,但如果用户从 Android 设置中关闭深色主题,我不知道如何将弹出图标更改为更深的颜色。
知道该怎么做吗?
AppShell.xaml 当前如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<Shell
x:Class="MAUIApp1.AppShell"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MAUIApp1"
FlyoutBackgroundColor="{AppThemeBinding Light=#f2f2f2, Dark=#2a2a2a}">
<Shell.Resources>
<ResourceDictionary>
...
</ResourceDictionary>
</Shell.Resources>
<Shell.FlyoutHeader>
...
</Shell.FlyoutHeader>
<Shell.ItemTemplate>
<DataTemplate>
...
</DataTemplate>
</Shell.ItemTemplate>
<FlyoutItem Title="Item1" Icon="item1.svg">
<ShellContent ContentTemplate="{DataTemplate local:page1}" Route="page1"/>
</FlyoutItem>
<FlyoutItem Title="Item2" Icon="item2.svg">
<ShellContent ContentTemplate="{DataTemplate local:page2}" Route="page2"/>
</FlyoutItem>
<FlyoutItem Title="Item3" Icon="item3.svg">
<ShellContent ContentTemplate="{DataTemplate local:page3}" Route="page3"/>
</FlyoutItem>
<Shell.FlyoutFooter>
...
</Shell.FlyoutFooter>
</Shell>
Run Code Online (Sandbox Code Playgroud) 我正在学习了解 .NET MAUI 的 XAML 中的绑定机制如何工作。我假设这对于所有 XAML 项目、WPF、MAUI 等都是相同的。
\n最后是整个 XAML。
\n这个 XAML 工作正常:
\n<Button WidthRequest="150" Text="Add Activity" \n Command="{Binding AddActivityEntityCommand}"\n IsEnabled="{Binding IsNotBusy}"\n Grid.Row="2"\n Margin="8"/>\nRun Code Online (Sandbox Code Playgroud)\n这是因为 Button 是 ContentPage 的一部分,它被x:DataType设置为MainPageViewModel,这是命令所在的位置吗?
Binding 设置为AddActivityEntityCommand,而实际方法签名为\n async Task AddActivityEntityAsync()。这是如何解决的?因为它显然与名称不匹配,但它有效。其工作/被认可的方法签名要求是什么?
另一方面,这并不像开箱即用那么简单:
\n<Label HorizontalOptions="End" TextColor="Red" Padding="0,0,10,0" Text="" \n IsVisible="{Binding IsSynchronized}">\n <Label.GestureRecognizers>\n <TapGestureRecognizer \n Command="{Binding Source={x:Type viewmodel:MainPageViewModel},\n Path=DeleteActivityCommand}" />\n </Label.GestureRecognizers>\n </Label>\nRun Code Online (Sandbox Code Playgroud)\nCommand="{Binding DeleteActivityCommand}不起作用,因为<DataTemplate x:DataType="model:ActivityEntity"> …