c# listview xamarin.forms listviewitem

c# - Xamarin.Forms ListView change Cell en ContextMenu abierto



listviewitem (1)

No hay necesidad de renderizador personalizado: simplemente puede agregar las siguientes etiquetas a styles.xml (ubicación: proyecto de Android> Resources> values> styles.xml )

<style name="MyTheme" parent="MyTheme.Base"> <item name="android:colorLongPressedHighlight">@color/ListViewHighlighted</item> </style> <color name="ListViewHighlighted">#A8A8A8</color>

Más detalles se pueden encontrar en esta publicación .

Yo uso Xamarin.Forms para definir un ListView . Este ListView define algunos ContextAction s dentro de ViewCell . Según la plataforma, estas acciones de contexto se presentan al usuario. En Android, esto se desencadena presionando durante mucho tiempo el elemento específico. Lamentablemente, este elemento no se destacará (correctamente), como se puede ver en esta captura de pantalla ( Tercer artículo presionado por mucho tiempo, lamentablemente aún no puedo incrustar imágenes).

¿Hay alguna manera de modificar la Celda cuando se abre el menú contextual? Específicamente, solicitando una solución para Android, pero también se agradece una respuesta general. El objetivo final es mejorar el resaltado, por ejemplo, cambiando el color de fondo de la celda. Modificar la celda, cuando se presiona ContextAction , no es lo que estoy buscando.

Navegué por el código fuente de Xamarin.Forms y pensé en heredar de alguna manera, por ejemplo, la clase ViewCell, pero no pude encontrar un evento o comando que se activaría / invocaría al presionar durante mucho tiempo un elemento. He configurado un repositorio simple para ilustrar el comportamiento: repositorio de GitHub

Los fragmentos de código más importantes

  • Definición de ListView en XAML

    <?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:ListViewContextMenu" x:Class="ListViewContextMenu.ListViewContextMenuPage"> <ListView x:Name="MyListView"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <ViewCell.ContextActions> <MenuItem Text="Action" Command="{Binding OnAction}" CommandParameter="{Binding .}"/> </ViewCell.ContextActions> <Label Text="{Binding Name}" /> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView> </ContentPage>

  • Definición de MyItem (MVVM)

    using System.Diagnostics; using Xamarin.Forms; namespace ListViewContextMenu { public class MyItem { public string Name { get; set; } public Command OnAction { get; set; } public MyItem() { OnAction = new Command((obj) => Debug.WriteLine($"Item {obj.ToString()} clicked")); } } }