En mi proyecto .Net Maui, estoy usando CollectionView dentro de ControlTemplate. La implementación se ve así:
<ContentView.ControlTemplate> <ControlTemplate> <Grid> <Grid.RowDefinitions> <RowDefinition Height="50" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <SearchBar x:Name="ObjectSearchBar" Grid.Row="0" IsSpellCheckEnabled="False" Keyboard="Text" Placeholder="{TemplateBinding SearchBarPlaceholderText}" TextChanged="ObjectSearchBar_TextChanged" /> <CollectionView x:Name="ObjectResultView" Grid.Row="1" Margin="10,10,10,10" ItemSizingStrategy="MeasureAllItems" ItemTemplate="{StaticResource templateSelector}" ItemsLayout="VerticalList" ItemsSource="{TemplateBinding DataSource}" SelectionChanged="ObjectResultView_SelectionChanged" SelectionMode="Single"> </CollectionView> </Grid> </ControlTemplate> <ContentView.ControlTemplate>Estoy usando este ContentView dentro de una ContentPage. La página contiene 2 StackLayouts y su implementación se ve así:
<ContentPage.Content> <Grid> <StackLayout HorizontalOptions="FillAndExpand" IsVisible="{Binding AddNewSectionIsVisible, Converter {converter:InvertedBoolConverter}}" Orientation="Vertical" VerticalOptions="FillAndExpand"> <controls:ObjectSearchControl DataSource="{Binding DataSource}" FilterChangedCommand="{Binding FilterChangedCommand}" HorizontalOptions="FillAndExpand" ObjectSelectedCommand="{Binding SelectedCommand}" SearchBarPlaceholderText="ABC" VerticalOptions="FillAndExpand" /> </StackLayout> <StackLayout HorizontalOptions="FillAndExpand" IsVisible="{Binding AddNewSectionIsVisible}" Orientation="Vertical" Style="{StaticResource rootStackLayout}" VerticalOptions="Center"> .... </StackLayout> </Grid> </ContentPage.Content>Solo se muestra uno de los StackLayouts cuando aparece la página.
Entonces, si configuro la altura de la segunda fila en un valor fijo o configuro la altura de CollectionView en un valor fijo, el desplazamiento funciona bien. Pero si uso un "*" o "Auto" para la definición de altura de la segunda fila, CollectionView ya no se desplaza.
Por favor, ¿alguien puede ayudarme en este caso? También intenté usar ScrollViews, configurando VerticalOptions de Stacklayouts o Grid en "FillAndExpand" como se describe en la documentación de MS, pero nada parece funcionar para mí.
Creo que la lógica de diseño no se dio cuenta de que la vista de colección debería desplazarse.
INTENTO DE ARREGLO #1
Prueba estos 2 cambios:
<ContentPage.Content> <!-- 1) "*": make sure row 0 takes all vertical space. --> <Grid RowDefinitions="*"> <!-- 2) remove the surrounding StackLayout, to simplify layout logic. --> <controls:ObjectSearchControl IsVisible="{Binding AddNewSectionIsVisible, Converter {converter:InvertedBoolConverter}}" DataSource="{Binding DataSource}" FilterChangedCommand="{Binding FilterChangedCommand}" HorizontalOptions="FillAndExpand" ObjectSelectedCommand="{Binding SelectedCommand}" SearchBarPlaceholderText="ABC" VerticalOptions="FillAndExpand" />PRUEBA SI #1 NO FUNCIONÓ
Si lo anterior no ayudó, entonces haga esta prueba:
<controls:ObjectSearchControl IsVisible="True" ... and set the other stacklayout to `IsVisible="False"`. Es decir, como prueba, fuerce que el control sea visible antes de que se llame a InitializeComponent desde el constructor. Esto debería hacer que CollectionView se marque correctamente como desplazamiento.
Se necesitan los resultados de esta prueba para saber qué enfoque tomar a continuación.
INTENTO DE ARREGLO #2 TBD
Si el n.º 1 no ayudó, se debe a que, cuando se diseñó la página por primera vez, CollectionView no se marcó como si necesitara desplazarse.
Esto puede deberse a la propiedad dinámica IsVisible o al diseño que se produjo antes de que DataSource tuviera contenido.
Es un error sutil en CollectionView, que se ha visto en otras circunstancias.
TBD: investigue las preguntas y respuestas anteriores para decidir la forma más fácil de solucionarlo.
Al refactorizar el diseño, encontré una solución para mi problema.
Reemplacé todos los StackLayouts a través de Grids y agregué ScrollView en mi control. Parece que la razón de mi problema ha sido el diseño complejo.