我有一个带有 .net maui 的弹出主控/详细信息页面。
在深色模式下,汉堡按钮、后退按钮和工具栏项目更多图标(三个点)在windwos上显示为黑色。在 Android 上,只有工具栏项目更多图标(三个点)是黑色的,后退按钮是白色的。
如何在 windows、android、ios 上的 .net maui 中更改我的工具栏项目更多图标颜色、humberger 图标颜色和后退按钮颜色?
提前致谢。
视窗:
安卓:
Windows 浅色模式:这里如何使更多图标变白?
我的风格`
<Color x:Key="Background_Dark">#081B25</Color>
<Color x:Key="DarkGreenBackgroundColor">#187D21</Color>
<Style TargetType="NavigationPage" ApplyToDerivedTypes="True">
<Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource DarkGreenBackgroundColor}, Dark={StaticResource Background_Dark}}" />
<Setter Property="BarBackgroundColor" Value="{AppThemeBinding Light={StaticResource DarkGreenBackgroundColor}, Dark={StaticResource Background_Dark}}" />
<Setter Property="BarTextColor" Value="White" />
<Setter Property="IconColor" Value="White" />
</Style>
<Style TargetType="Page" ApplyToDerivedTypes="True">
<Setter Property="Padding" Value="0"/>
<Setter Property="BackgroundColor" Value="{AppThemeBinding Light=White, Dark={StaticResource Background_Dark}}" />
</Style>
Run Code Online (Sandbox Code Playgroud)
`
我想编写一个小型 .Net MAUI 应用程序,它使用 C# SDK NuGet 包(实现Hyperledger Anoncreds)。在 Android(模拟器或设备)上运行应用程序时,大多数 SDK 方法调用都可以工作,但某些调用仍然会抛出异常,而DllNotFoundException没有任何指示实际缺少哪个 Dll。
在我阅读了 SDK 后,我能够.so向 MAUI 项目添加一些依赖项,但显然仍然缺少一些依赖项。
我已经尝试阅读 SDK 源代码和它包装的一些 Rust 代码,以预感可能缺少的内容。但即使费力地浏览这些cargo.toml文件也只向我展示了板条箱,而不是任何实际的库。
像“APK分析器”这样的Android工具提供了很多有用的信息,但没有依赖关系概述,并且“Dependency Walker”工具只分析与实际Android环境不同的Windows构建的二进制文件。
如何找到异常指示的缺失依赖项?有没有像“Dependency Walker”这样的适用于 Android APK 的工具?
编辑:修复了一些拼写错误并添加了更多信息。
有人可以告诉我如何使用 .NET MAUI 强制系统打开系统设置,或者更好的系统设置 > myApp > 权限?我正在尝试编写代码,在不允许应用程序使用相机后将用户重定向到设置。
Android 和 iOS 均可
我尝试寻找与意图相关的东西
我正在尝试了解如何在 MAUI 应用程序和 MVVM 的页面之间导航的最佳方式。
我在 Microsoft 的示例中看到,默认的操作方式是使用PushAsync(),但后来我发现可以使用 进行导航Shell.Current.GoToAsync()。
两者有什么区别?或者说它们是互补的?
在Android中,默认颜色是橙色,但我不知道如何更改它。\n我尝试了微软官方文档的演示代码,但\xc2\xb4不起作用。
\n//Xaml//\n<CollectionView ItemsSource="{Binding Products}"\n ItemTemplate="{StaticResource OfferProductStyle}"\n ItemsLayout="VerticalGrid,1"\n SelectionMode="Single"\n x:Name="MyCollectionView">\n</CollectionView>\n\nRun Code Online (Sandbox Code Playgroud)\n\n 这里有一篇很棒的文章,描述了如何在 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 …
我有以下内容
<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 应用程序中,发布时的 是空白的,而在调试时,它已填充并且手势识别器可以工作。当我将项目添加到列表中时,会出现正确的项目数量,因此我认为上面突出显示的标签发生了一些情况。
我该如何解决这个问题?
在我的 .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通过我的视图模型将图像源设置为文件夹中的文件?
我正在使用 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 和依赖注入来初始化我的对象。
在我的 .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)