Xamarin是一个由Xamarin.iOS,Xamarin.Android,Xamarin.Mac和Xamarin Test Cloud组成的平台。它允许您编写适用于iOS,Android和Mac的跨平台本机应用程序,并在整个生命周期内关注您的应用程序。 Xamarin.Forms的引入支持iOS,Android和Windows的Native UI开发
我一直在尝试寻找一个位置来存储我的应用程序数据库,我可以在 Android 模拟器的文件浏览器中找到该数据库。根据我当前的设置,重新安装应用程序后,数据库将被擦除。我...
我尝试在 iPhone 11 上部署我的应用程序进行测试,但收到一条错误消息,告诉我它无法自动配置项目。 我目前正在使用 MAUI,但发生了同样的错误
更新/重新安装后保留的 SQLite Xamarin/.net Maui 数据库位置
我一直在尝试找到一个位置来存储我的应用程序数据库,我可以在我的 Android 模拟器上的文件浏览器中找到该数据库。另外,在我重新安装应用程序后,根据我当前的设置,数据库将被擦除...
Xamarin 应用程序可以工作并可部署到比该新设备(即 Android 7.1.2)更早和更晚的版本。 从应用程序中心直接安装/ADB安装在此设备上也可以正常工作...
MAUI Android 应用程序中的深层链接问题:ClassNotFoundException
我正在尝试在我的 MAUI Android 应用程序中实现深度链接来处理 ed2k 链接。但是,当我单击 ed2k 链接并选择我的应用程序将其打开时,出现以下错误: 贾夫...
我想在表单中使用水平分隔线。据我所知,Xamarin.Forms 没有提供这一功能。 有人可以提供分隔符的片段吗? 更新1 根据杰森的道具...
Xamarin IOS 构建错误“提取 Zip 条目将导致在指定目标目录之外生成文件。”
我正在尝试构建新的 IOS 版本并收到以下错误: “C:\Program Files\Microsoft Visual Studio�2\Professional\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.After.targets(80,3):错误...
NuGet 恢复问题:未找到 Xamarin iOS CSharp 目标
我在 Azure DevOps 上有一个 Xamarin Forms Android 构建管道,我的应用程序在本地构建没有问题。当管道运行时,当我尝试执行 NuGet Restor 时,出现以下错误...
如何将我的通用 Xamarin.Forms 渲染器转换为 MAUI 处理程序?
有人可以帮助我了解如何将自定义渲染器正确转换为 .NET MAUI 处理程序吗? 在 Xamarin.Forms 中,我有一个通用渲染器,可以将其附加到任何用户控件。我超越我...
我正在学习 xamarin 形式和 mvvm 模式。我想知道是否可以否定绑定布尔值。我的意思是: 我有,比方说带有 isVisible 绑定的 Entry: 我正在学习 xamarin 形式和 mvvm 模式。我想知道是否可以否定绑定布尔值。我的意思是: 我有,比方说,带有 isVisible 绑定的条目: <Entry x:Name="TextEntry" IsVisible="{Binding IsVisibleEntry}" /> 和 Label 当 TextEntry 可见时我想隐藏它们。 <!-- ofc it is not working --> <Label x:Name="MainLabel" isVisible="!{Binding IsVisibleEntry}" /> 是否可以在 MainLabel 中不为 ViewModel 创建新变量? 选项一:转换器 定义转换器: public class InverseBoolConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return !((bool)value); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return value; //throw new NotImplementedException(); } } XAML 中的用法: <Label x:Name="MainLabel" isVisible="{Binding IsVisibleEntry, Converter={Helpers:InverseBoolConverter}}"/> XAML 标头 xmlns:Helpers="clr-namespace:HikePOS.Helpers" 选项二:触发 <Label x:Name="MainLabel" isVisible="{Binding IsVisibleEntry}"> <Label.Triggers> <DataTrigger TargetType="Label" Binding="{Binding IsVisibleEntry}" Value="True"> <Setter Property="IsVisible" Value="False" /> </DataTrigger> </Label.Triggers> </Label> 您可以使用 Xamarin Community Toolkit,而不是编写自己的转换器,它现在有一个可以开箱即用的转换器 invertedboolconverter。这个例子(取自微软的文档)展示了它是如何工作的: <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:xct="http://xamarin.com/schemas/2020/toolkit" x:Class="MyLittleApp.MainPage"> <ContentPage.Resources> <ResourceDictionary> <xct:InvertedBoolConverter x:Key="InvertedBoolConverter" /> </ResourceDictionary> </ContentPage.Resources> <StackLayout> <Label IsVisible="{Binding MyBooleanValue, Converter={StaticResource InvertedBoolConverter}}" /> </StackLayout> </ContentPage> 您将需要创建一个反向转换器,以便您的绑定看起来有点像这样: public class InverseBoolConverter : IValueConverter { public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return !(bool)value; } public object ConvertBack (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return !(bool)value; } } 在您的 XAML 中 <local:InverseBoolConverter x:Key="inverter"/> <Entry x:Name="TextEntry" IsVisible="{Binding IsVisibleEntry, Converter={StaticResource inverter}}" /> 尽管@praty 的解决方案有效,但如果您像我一样使用自定义控件/视图或 XCT 的弹出窗口。在我们的 XAML 中使用转换器之前,我们需要这样指定: <ContentView.Resources> <converters:InverseBoolConverter x:Key="invrerseBoolConverter" /> </ContentView.Resources> 因此最终代码将是: InverseBoolConverter.cs // Under namespace MyProject.Converters public class InverseBoolConverter : IValueConverter { public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return !(bool)value; } public object ConvertBack (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return !(bool)value; } } XAML 代码 <xct:Popup ... xmlns:xct="http://xamarin.com/schemas/2020/toolkit" xmlns:converters="clr-namespace:MyProject.Converters" ...> <ContentView> <ContentView.Resources> <converters:InverseBoolConverter x:Key="inverseBoolConverter" /> </ContentView.Resources> <StackLayout> <Label IsVisible="{Binding IsVisibleLabel, Converter={StaticResource inverseBoolConverter}}" /> </StackLayout> </ContentView> </xct:Popup> 注意:虽然我们可以使用 Xamarin 社区工具包的 InvertedBoolConverter,但我已经描述了手动解决方案,以便我们可以添加除内置转换器之外的自定义值转换器。 我喜欢已经提供的答案,但我想我应该添加我自己有时使用的版本。在 MVVM 架构中,视图模型的属性都在对象设置器中调用 SetProperty(),从而引发 INotifyPropertyChanged 事件。我一直在做的是将第二个属性添加到视图模型中,并在第一个属性的设置器中将其值设置为 !value。 例如,每当属性 button.IsEnabled = false 出现时,我希望按钮为 ViewModel.IsBusy = true。这是一个反向布尔示例,就像您所问的那样。 ViewModel.cs 属性: private bool enableButton; public bool EnableButton { get { return enableButton; } set { SetProperty(ref enableButton, value); } } private bool isBusy; bool IsBusy { get { return isBusy; } set { SetProperty(ref isBusy, value); EnableButton = !value; } } XAML: <ActivityIndicator IsRunning="{Binding IsBusy}"/> <Button Text="Start Sync" Command="{Binding SyncCommand}" IsEnabled="{Binding EnableButton}"/> 这样,在我的代码中任何时候我调用IsBusy = true,它都会同时设置button.IsEnabled = false,解决反向布尔问题。
如何在 Xamarin 应用程序中的 XAML 中格式化日期和时间
我在下面设置了 XAML 代码。 我想要像 2014 年 9 月 12 日下午 2:30 这样的结果。
无法将 Xamarin Android 应用程序定位到 Android 14
我一直在尝试将我们的 Xamarin Native (Xamarin.Android) 应用程序的 traget 框架更新到 Android 14。 然而,我已经安装了 API 34 的 SDK 工具,它反映在 Target A 下...
我们的应用程序中的 Firestore 数据库离线模式遇到了严重问题,我希望我们只是在某个地方犯了一个愚蠢的错误。鉴于这对我们来说绝对是一场精彩的表演,任何...
如何访问 ObservableCollection 模型属性以在 shell 弹出窗口中进行数据绑定?
我正在创建我的第一个 MAUI 应用程序,它是一个术语跟踪器(带有社区工具包 MVVM)。我已手动向数据库添加了一些术语,并且正在尝试让它们以飞出方式显示。我曾经
系留 iOS 应用程序在调试器暂停几秒钟后终止 (Visual Studio Avalonia/Xamarin/Maui)
我正在使用 Avalonia 开发一个跨平台应用程序(用 C# 编写,工作原理类似于 Xamarin / Maui)。该应用程序面向 iOS、Android 和 Windows,并且在所有 3 种操作系统下均运行良好。开发正在进行中
如何从 xamarin android web 视图中加载的登录页面的用户名文本框中读取值
用户在 Xamarin android 中使用 webview 在网页中输入用户名文本框中的值后,我试图从登录页面获取用户名文本框中的值。 我尝试使用“document.getelementbyid('useranme')。
尝试向服务器发送 byte[] 时,Xamarin 中出现“无法访问已处置对象”异常
这个问题的旧版本太长了,所以在多次尝试解决这个问题之后,我发现所有的问题都可以简化为一个简单的问题。为什么这会产生
我有一个应用程序,您应该通过将地图移动到坐标并按下一步来从 Google 地图获取坐标。为了显示地图指向的位置,有一个黑色矩形......
在Xamarin中滚动CollectionView图片时出现滞后,该怎么办?
当我在 CollectionView 中滚动时,它开始滞后,可能正在加载下一张图片。我能用它做什么?我该如何优化它? 这是 XAML: 当我在 CollectionView 中滚动时,它开始滞后,可能正在加载下一张图片。我能用它做什么?我该如何优化它? 这是 XAML: <Grid BackgroundColor="#00aeef"> <Grid.RowDefinitions> <RowDefinition Height="*"/> </Grid.RowDefinitions> <CollectionView x:Name="myCollectionView" Grid.Row="0"> <CollectionView.ItemTemplate> <DataTemplate> <StackLayout> <Frame Padding="0" BackgroundColor="#00d2ff" Margin="20" CornerRadius="30"> <StackLayout Padding="20"> <Label Text="{Binding Airline}" TextColor ="White" FontSize="30" HorizontalOptions="Center"/> <Image Source="{Binding Url}" HeightRequest="200"/> <Label Text="{Binding Plane, StringFormat='Plane: {0}'}" TextColor ="White" FontSize="15"/> <Label Text="{Binding Airline, StringFormat='Airline: {0}'}" TextColor ="White" FontSize="15"/> <Label Text="{Binding Livery, StringFormat='Livery: {0}'}" TextColor ="White" FontSize="15"/> <Label Text="{Binding Registration, StringFormat='Reg: {0}'}" TextColor ="White" FontSize="15"/> <Label Text="{Binding Airport, StringFormat='Airport: {0}'}" TextColor ="White" FontSize="15"/> <Label Text="{Binding Date, StringFormat='Date: {0}'}" TextColor ="White" FontSize="15"/> <Label Text="{Binding Comment, StringFormat='Comment: {0}'}" TextColor ="White" FontSize="15"/> </StackLayout> </Frame> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </Grid> 这是我的代码: public ShowPlanes() { InitializeComponent(); var db = new SQLiteConnection(_dbPath); var data = db.Table<Airplane>().ToList(); myCollectionView.ItemsSource = data; NavigationPage.SetHasNavigationBar(this, false); } 如果您的图像很大,请尝试将其调整为您需要的尺寸,也许会解决这个问题,下面是非常好的参考。 https://learn.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/xamformsimageresize/ 如果您的图像很大,例如超过 100KB(每个),那么您可以考虑使用不同的文件名和较小的尺寸(例如 10-20KB)为相同图像创建缩略图。 这将提高您的应用程序的速度。 要调整图像大小,您可以使用以下代码。该功能将保持原始图像的纵横比。此外,代码会将原始图像设置为 72dpi。结果将是一个小的优化文件,准备渲染到您的视图。 using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; ... public static void CreatePreviewImage(string imageFullFilename, string previewFullFilename) { ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg); // Create an Encoder object based on the GUID // for the Quality parameter category. System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality; // Create an EncoderParameters object. // An EncoderParameters object has an array of EncoderParameter // objects. In this case, there is only one // EncoderParameter object in the array. EncoderParameters myEncoderParameters = new EncoderParameters(1); EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 75L); //default myEncoderParameters.Param[0] = myEncoderParameter; Bitmap originalimage = (Bitmap)System.Drawing.Image.FromFile(imageFullFilename, true); originalimage.SetResolution(72, 72); int w = originalimage.Width; int h = originalimage.Height; int pw = 0; int ph = 0; h = originalimage.Height * w / originalimage.Width; if (w > h) { pw = 200; ph = h * pw / w; } else { ph = 200; pw = w * ph / h; } Bitmap previewImage = ImageHandlers.ResizeImage(originalimage, pw, ph); previewImage.Save(previewFullFilename, jpgEncoder, myEncoderParameters); } public static Bitmap ResizeImage(Image image, int width, int height) { var h = image.Height; var w = image.Width; if (w > h) { height = h * width / w; } else if( h < w ) { width = w * height / h; } var destRect = new Rectangle(0, 0, width, height); var destImage = new Bitmap(width, height); destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); using (var graphics = Graphics.FromImage(destImage)) { graphics.CompositingMode = CompositingMode.SourceCopy; graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; using (var wrapMode = new ImageAttributes()) { wrapMode.SetWrapMode(WrapMode.TileFlipXY); graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); } } return destImage; } public static ImageCodecInfo GetEncoder(ImageFormat format) { ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); foreach (ImageCodecInfo codec in codecs) { if (codec.FormatID == format.Guid) { return codec; } } return null; } 这是调整大小的工作代码: var bitmap = SKBitmap.Decode(Path); int h = bitmap.Height; int w = bitmap.Width; int newWidth = w; int newHeight = h; if (h > 1080 || w > 1080) { int rectHeight = 1080; int rectWidth = 1080; //aspect ratio calculation float W = w; float H = h; float aspect = W / H; await DisplayAlert("aspect", aspect.ToString() + w.ToString() + h.ToString(), "OK"); //new dimensions by aspect ratio newWidth = (int)(rectWidth * aspect); newHeight = (int)(newWidth / aspect); await DisplayAlert("aspect", "h " + newHeight.ToString() + " w " + newWidth.ToString(), "OK"); //if one of the two dimensions exceed the box dimensions if (newWidth > rectWidth || newHeight > rectHeight) { //depending on which of the two exceeds the box dimensions set it as the box dimension and calculate the other one based on the aspect ratio if (newWidth > newHeight) { newWidth = rectWidth; newHeight = (int)(newWidth / aspect); } else { newHeight = rectHeight; newWidth = (int)(newHeight * aspect); } } } var resizedImage = bitmap.Resize(new SKImageInfo(newWidth, newHeight), SKBitmapResizeMethod.Lanczos3); var image = resizedImage.Encode(SKEncodedImageFormat.Jpeg, 80); var path = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); var filepath = System.IO.Path.Combine(path, fileName); string finalPath = filepath; using (var stream = File.OpenWrite(filepath)) image.SaveTo(stream); return finalPath; } 我检查了你的代码,并通过不同的方式进行了实验,最后,我明白了为什么它会滞后。通过添加滚动视图,还记得修复图像的宽度。你能试试这个代码吗: <Grid BackgroundColor="#00aeef"> <Grid.RowDefinitions> <RowDefinition Height="*"/> </Grid.RowDefinitions> <scrollview> <CollectionView x:Name="myCollectionView" Grid.Row="0"> <CollectionView.ItemTemplate> <DataTemplate> <StackLayout> <Frame Padding="0" BackgroundColor="#00d2ff" Margin="20" CornerRadius="30"> <StackLayout Padding="20"> <Label Text="{Binding Airline}" TextColor ="White" FontSize="30" HorizontalOptions="Center"/> <Image Source="{Binding Url}" HeightRequest="200" WidthRequest="200"/> <Label Text="{Binding Plane, StringFormat='Plane: {0}'}" TextColor ="White" FontSize="15"/> <Label Text="{Binding Airline, StringFormat='Airline: {0}'}" TextColor ="White" FontSize="15"/> <Label Text="{Binding Livery, StringFormat='Livery: {0}'}" TextColor ="White" FontSize="15"/> <Label Text="{Binding Registration, StringFormat='Reg: {0}'}" TextColor ="White" FontSize="15"/> <Label Text="{Binding Airport, StringFormat='Airport: {0}'}" TextColor ="White" FontSize="15"/> <Label Text="{Binding Date, StringFormat='Date: {0}'}" TextColor ="White" FontSize="15"/> <Label Text="{Binding Comment, StringFormat='Comment: {0}'}" TextColor ="White" FontSize="15"/> </StackLayout> </Frame> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </scrollview> </Grid>
我正在创建跨平台应用程序。我正在尝试在 Android 中反序列化一个文件。 Windows 中一切工作正常。 这是我的代码: [可序列化] //serializacja potrzebna do zapisywani...