Marionette CollectionView通过指定的childView View对象呈现每个对象来显示Backbone集合对象。
如何更改CollectionView中所选项目的背景颜色? .Net Maui 在命令中
如何更改CollectionView中所选项目的背景颜色? .Net 毛伊岛 我看到了对该论坛之前询问的项目的回复:如何更改
MAUI:添加 RefreshView 时 Collectionview 内容不可见
我为 CollectionView 添加了 RefreshView。添加 RefreshView 后,CollectionView 内容在 UI 上不可见。添加之前,CollectionView 内容在 UI 上可见
在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>
.NET MAUI CollectionView 滚动高度在项目上更改 IsVisible 时不会更新
我在 .NET MAUI 应用程序上有一个 CollectionView,它显示组件列表。它的配置如下: 我在 .NET MAUI 应用程序上有一个 CollectionView,它显示了组件列表。配置如下: <Grid Grid.Row="2" RowDefinitions="*"> <CollectionView ItemsSource="{Binding Source={x:Reference self}, Path=QuestionComponentList}" ItemSizingStrategy="MeasureAllItems" x:DataType="local:QuestionComponentVM" SelectionMode="None" ItemTemplate="{StaticResource componentSelector}"/> </Grid> componentSelector在同一页面中定义,因为(为了简洁起见,省略了一些数据模板,但它们都遵循相同的模式,并且与这个问题相关,都包含IsVisible="{Binding HasOptions}": <DataTemplate x:Key="photo" x:DataType="local:QuestionComponentVM"> <local:PhotoComponent PhotoAdded="OnPhotoAdded" PhotoDeleted="OnPhotoDeleted" ChangeMade="QcLayout_OnChangeRequiresSaving" IsVisible="{Binding HasOptions}" QuestionComponent="{Binding .}"/> </DataTemplate> <local:QuestionComponentDataTemplateSelector x:Key="componentSelector" ValueTemplate="{StaticResource value}" RadioButtonTemplate="{StaticResource radiobutton}" CheckboxTemplate="{StaticResource checkbox}" PickerTemplate="{StaticResource picker}" PhotoTemplate="{StaticResource photo}" PredefinedTemplate="{StaticResource predefined}" /> 当列表最初显示时,某些项目不会呈现,这是期望的行为。但是,当数据发生变化时, HasOptions 的值可能会发生变化 - 如果它变成 true,则该项目应该(并且确实)呈现。 问题是,即使新项目呈现,也无法滚动到它们 - CollectionView 似乎没有意识到其内容的大小已更改。我已经尝试了我能想到的一切。我确信绑定是正确的,因为项目按预期出现和消失。我正束手无策,试图弄清楚如何让 CollectionView 让我滚动到它最初的“结束”点。下图显示了内容如何更新 - 您可以看到新项目出现 - 但无法滚动到它。 这是一直滚动到底部的CollectionView: 这是在页面发生更改后,列表中的另一个项目的 IsVisible 变为 true: 如图所示,该项目现在确实已渲染,但无法向下(向上?)滚动到它。非常感谢您收到任何帮助或指示! 感谢 Azeem - 我从绑定 IsVisible 更改为使用 ObservableCollection,并且为了防止当项目变得可见或隐藏时列表跳回开头,从 ObservableCollection 插入和删除项目 - 所以本质上是根据组件所需的可见性来过滤组件。问题解决了。
更改 CollectionView 布局会将每个项目拉伸到屏幕宽度
我正在尝试让“查看更多”按钮显示更多或更少的项目。 “Less”被定义为一次显示多个项目的水平列表,而“More”是一个版本...
MAUI CollectionView 父级对子级的价值需要示例/指导
这应该(希望)是一件很容易回答的事情。我有一个绑定到 JSON 数据源的集合视图,以及我为其存储值的 JSON 文件第一级中的一个按钮(在 Prefe...
我正在尝试在 Maui 项目中的两个 CollectionView 之间实现拖放。 在我的示例中,我在第一个 CollectionView 中有一个歌曲集合,在第二个集合中有一个播放列表组...
为什么当我尝试导航到特定组时,我总是被发送回第一个组? 如果我找到一个组,并在其中找到我需要的实例,并将其传递给 ScrollTo,那么搜索就会起作用
如何实现具有垂直组和水平项目的 .Net Maui CollectionView 布局
我正在尝试在应用程序中实现某种外观,以分类方式显示项目。 据我所知,CollectionView 允许我们准确地做到这一点,并且我已经成功了......
在 dotNET MAUI 的一页上使用多个集合视图处理滚动和高度
我有一个水平方向和一个垂直方向的 CollectionView,它们都放置在 ScrollView 中。垂直方向的视图变得仅与其中第一个项目一样高,并且它滚动......
我找不到 .NET MAUI 奇怪行为的解决方案。 我正在利用集合视图来描绘问题的不同数量的答案。每个答案前面都有一个复选框。
在.NET MAUI中为CollectionView正确设置RadioButtonGroup
在 .NET MAUI 应用程序中,我使用 CollectionView 来显示特定的 ItemTemplate,其中还包括 RadioButtons。然而,互斥状态并未实现,因为不知何故......
collectionview包含一个编辑器,如何通过编辑器中的更改来更改ViewModel中的文本#maui
当用户在编辑器中更改文本时,我需要将更改显示在 private MessageModel 消息模型,与添加新消息的按钮相同 当用户在编辑器中更改文本时,我需要将更改显示在 私有MessageModel消息模型,与添加新消息的按钮相同 <CollectionView ItemsSource="{Binding MessageModels.messege}" x:Name="collectionView"> <CollectionView.Header> <HorizontalStackLayout HorizontalOptions="Center" > <Label TextColor="Black" Text="Messages" VerticalOptions="Center"></Label> <Button MinimumWidthRequest="10" MinimumHeightRequest="10" Command="{Binding addNewmessageCommand}" Text="Add New message"></Button> </HorizontalStackLayout> </CollectionView.Header> <CollectionView.ItemTemplate> <DataTemplate> <HorizontalStackLayout Padding="2"> <Editor AutoSize="TextChanges" Text="{Binding . }" WidthRequest="300" FontSize="16" TextColor="#1565C0" /> <Button Background="Red" Command="{Binding Source={x:Reference collectionView}, Path=BindingContext.DeleteCommand}" CommandParameter="{Binding .}" Text="X" /> </HorizontalStackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> 我尝试使用 INotifyPropertyChanged,但也没有帮助 public partial class MessageModelEllementVM : CommunityToolkit.Mvvm.ComponentModel.ObservableObject { AddNewWayD addNewWayD; public event PropertyChangedEventHandler PropertyChanged; public MessageModelEllementVM( MessageModel messageModel, List<string> ways,int gridPosition, AddNewWayD addNewWay) { this.addNewWayD = addNewWay; this.messageModels = messageModel; GridPosition = gridPosition; photoURL = "фото не выбрали"; dialogimage = new Image(); messageModels.Plot_twist.ToList().ForEach(i => plot_twist += "," + i.ToString()); answers = AnswerTextConverter.Convert(messageModels.AnswerText, ways); } public MessageModelEllementVM() { this.messageModels = new MessageModel(); dialogimage = new Image(); } private int GridPosition; [ObservableProperty] public ObservableCollection<AnswerText> answers; [ObservableProperty] Image dialogimage; FileResult? uploadedFile; [ObservableProperty] string plot_twist; [ObservableProperty] private MessageModel messageModels; [ObservableProperty] string photoURL; [RelayCommand] public void AddWay() { //addNewWayD(GridPosition,messageModels); } [RelayCommand] async void AddImge() { uploadedFile = await MediaPicker.PickPhotoAsync(); if (uploadedFile != null) { dialogimage.Source= uploadedFile.FullPath; } } [RelayCommand] void addNewmessage() { messageModels.messege.Add(string.Empty); } [RelayCommand] private void Delete(string text) { foreach (var item in messageModels.messege) { if (item == text) { messageModels.messege.Remove(item); break; } } } } Code MessageModel 我也尝试在那里添加事件,但没有帮助 public class MessageModel{ public MessageModel() { Plot_twist = new List<int>(); messege = new ObservableCollection<string>(); AnswerText = new ObservableCollection<(string Answer, List<int> way)>(); } public List<MessageModel> messageModel = new List<MessageModel>(); public List<int> Plot_twist { get; set; } //номер диалога по типу ["0","1","1"] - глава 0 подветка 1 в подветке подветка 1 public ObservableCollection<string> messege { get; set; } //сообщения от Алисы (массив чтобы несколько подряд ) public string photoURL { get; set; } public ObservableCollection<(string Answer, List<int> way)> AnswerText; //way - адрес на продолжение }``` I need the data to change, but I'm still a beginner and I don't understand how to do it. can you please explain how it works and what ways it can be fixed 您的编辑器的 Text 属性绑定到纯字符串。数据绑定不会更改对象本身(在您的情况下是字符串),它们会更改对象的属性。这就是为什么您需要绑定到某种属性。 解决此问题的最简单方法是为您的消息实现一个带有字符串属性的包装类: public class Message { //note that binding to object's fields also doesn't work: //this works public string Text { get; set; } //this - does not! //public string Text; public Message(string text) { Text = text; } } 并且像这样使用它 public ObservableCollection<Message> messege { get; set; } 在 MessageModelElementVM 中,并且 <Editor Text="{Binding Text }" ... /> 在 xaml 中 此外,无需在 foreach 命令中使用 Delete。离开 <Button CommandParameter="{Binding .}" ... /> 照原样并将命令更改为: [RelayCommand] private void Delete(Message msg) { messageModels.messege.Remove(msg); } 这将删除您在 CommandParameter 中传递的确切对象
collectionview 中的复选框列表需要很长时间才能加载
我需要在屏幕上显示复选框列表。当我尝试将其添加到集合视图中时,加载需要很长时间。 下面是源代码。我在“我要做的项目”中只添加了一些项目...
使用.net maui,从列表创建CollectionView时,如何访问另一个列表以根据ID提取详细信息?
我对 xaml 和 .net maui 还很陌生,但我真的不知道该使用哪些搜索词。我想用集合视图在 xaml 中列出今天的任务通知。我想要这份清单,当
为什么我的 CollectionView 在 .NET MAUI 中添加重复的项目?
为什么相同的项目会重复添加到我的 CollectionView 中? 到底发生了什么: 每次加载时(滚动时),我想再加载 5 个项目到我的 CollectionView 中,但发生的情况是这样的:
美好的一天, 我正在使用集合视图来查看 Xamarin Forms 中的用户地址列表,并且数据模板中有一个图像,供用户点击以编辑任何所需的地址。请参阅下面的代码。我的
如何从Observable RxSwift 设置collectionView sizeForItemAt
在尝试使集合视图单元格的高度动态化时,我遇到了一些问题。高度数据位于我的枚举 Observable<[MovieSection]> 数组内。据我所知,RxSwift 不...
我需要一些有关 TapGestureRecognizer 中绑定的帮助。我有以下代码来创建 CollectionView。我在该视图中创建一个 TapGestureRecognizer,并希望命令参数 t...
我想使collectionView单元格中的某些视图可点击。 ViewController的代码 类 ViewController: UIViewController { 让 collectionView:UICollectionView = { 让我们看看=