Я пытаюсь обеспечить автоматическую регулировку высоты для объекта CollectionView в наборе инструментов: Popup. Во всплывающем окне есть заголовок, запись и кнопка, которые вызывают команду для заполнения CollectionView под ним, но она не отображает никакого результата, поскольку высота Popup или CollectionView не увеличивается. На платформе Android все работает нормально, а на Windows работает только в режиме горячей перезагрузки после изменения HeightRequest или MiniminHeightRequest и после повторной отладки снова не работает.
Вот код элемента Popup:
<?xml version = "1.0" encoding = "utf-8" ?>
<toolkit:Popup xmlns = "http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
x:Class = "SimpleRunManager.Views.Popups.SetStaticLocalizationPopup"
xmlns:toolkit = "http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
xmlns:viewmodel = "clr-namespace:SimpleRunManager.ViewModels"
x:DataType = "viewmodel:SetStaticLocalizationPopupViewModel"
xmlns:model = "clr-namespace:SimpleRunManager.Models"
Color = "{StaticResource MainPopup}"
CanBeDismissedByTappingOutsideOfPopup = "True"
HorizontalOptions = "{OnPlatform Default='Fill', WinUI='Center'}"
VerticalOptions = "Center">
<!-- TODO -> style -->
<VerticalStackLayout MinimumWidthRequest = "{OnPlatform WinUI='500'}"
BackgroundColor = "{StaticResource MainPopup}"
MaximumHeightRequest = "{OnPlatform WinUI='601'}"
VerticalOptions = "FillAndExpand">
<Grid ColumnDefinitions = "{OnPlatform Default='*,auto', WinUI='*,*'}">
<Label Grid.ColumnSpan = "{OnPlatform Default='1', WinUI='2'}"
Text = "Set localization"
VerticalOptions = "Center"
HorizontalOptions = "CenterAndExpand"
Style = "{StaticResource HeaderLabel}"
FontAttributes = "Bold"
Padding = "10,20,10,20"/>
<Button Grid.Column = "1"
Text = "Delete"
Style = "{StaticResource DangerButton}"
HorizontalOptions = "End"
Margin = "0,20,15,20"
Command = "{Binding DeleteStaticLocalizationCommand}"
CommandParameter = "{Binding Source = {RelativeSource Mode=FindAncestor, AncestorType = {x:Type toolkit:Popup}}}"></Button>
</Grid>
<Grid ColumnDefinitions = "*,*"
ColumnSpacing = "15"
Padding = "15,0,15,20">
<Entry Placeholder = "City name"
Text = "{Binding CityName}"
Grid.Column = "0"
TextColor = "Snow"></Entry>
<Button Text = "Search"
Command = "{Binding SearchCommand}"
CommandParameter = "{Binding Source = {RelativeSource Mode=FindAncestor, AncestorType = {x:Type toolkit:Popup}}}"
Grid.Column = "1"></Button>
</Grid>
<CollectionView IsVisible = "{Binding IsSearched}"
ItemsSource = "{Binding CityChoices}">
<CollectionView.ItemTemplate>
<DataTemplate x:DataType = "model:CityInfo">
<VerticalStackLayout HorizontalOptions = "FillAndExpand"
Padding = "10,20,10,20"
HeightRequest = "100">
<VerticalStackLayout.GestureRecognizers>
<TapGestureRecognizer CommandParameter = "{Binding .}" Command = "{Binding Source = {RelativeSource AncestorType = {x:Type viewmodel:SetStaticLocalizationPopupViewModel}}, Path=SetChosenCityCommand}"></TapGestureRecognizer>
</VerticalStackLayout.GestureRecognizers>
<Label Style = "{StaticResource CityInfoLabel}">
<Label.Text>
<MultiBinding StringFormat = "{}{0} - {1}">
<Binding Path = "CityName"></Binding>
<Binding Path = "CountryName"></Binding>
</MultiBinding>
</Label.Text>
</Label>
<Label Style = "{StaticResource CityInfoLabel}">
<Label.Text>
<MultiBinding StringFormat = "{}({0} | {1})">
<Binding Path = "Lat"></Binding>
<Binding Path = "Lon"></Binding>
</MultiBinding>
</Label.Text>
</Label>
</VerticalStackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
<CollectionView.EmptyView>
<Label IsVisible = "{Binding IsSearched}"
Text = "Failed to find city with that name"
Style = "{StaticResource CityInfoLabel}"
Padding = "10,20,10,20"
TextColor = "OrangeRed"></Label>
</CollectionView.EmptyView>
</CollectionView>
</VerticalStackLayout>
</toolkit:Popup>
Вот ссылка на видео, где я показал свою проблему: Видео на Google Диске
Я уже пробовал такие параметры изменения, как HorizontalOptions, Вертикальные параметры, Минимальная/Максимальная ширина/Высота, и даже пытался использовать Grid вместо ВертикальногоStackLayout.
На платформе Android все работает нормально, а на Windows работает только в режиме горячей перезагрузки после изменения HeightRequest или MiniminHeightRequest и после повторной отладки снова не работает.
Я воспроизвел это как ваше видеошоу. Я также пытался использовать Grid
, чтобы обернуть все содержимое всплывающего окна, но это закончилось неудачей. Вы можете сообщить об этом в MAUI или CommunityToolkit на GitHub. Сообщите нашим разработчикам и разберитесь с этим.
Вот мое решение и то, как я справился с этой проблемой: Там, где я разместил логику загрузки и заполнения ObservableColletion для Popup, где заканчивается весь процесс, я добавил этот код:
#if WINDOWS
_thisPopup!.Content!.MinimumHeightRequest = 1;
#endif
(_thisPopup — текущий объект Popup)
После этих изменений все работает нормально на платформе Windows.