Контекстные действия ViewCell в Android
По умолчанию от Xamarin.Forms 4.3, когда ViewCell
приложение Android определяет контекстные действия для каждого элемента в a ListView
, контекстное меню действий обновляется при изменении выбранного ListView
элемента. Однако в предыдущих версиях контекстного Xamarin.Forms меню действий не было обновлено, и это поведение называется устаревшим режимом ViewCell
. Этот устаревший режим может привести к неправильному поведению, если DataTemplateSelector
ListView
используется для задания из ItemTemplate
DataTemplate
объектов, определяющих различные действия контекста.
Эта платформа Android включает ViewCell
устаревший режим меню контекстных действий для обратной совместимости, чтобы контекстное меню действий не обновлялось при изменении выбранного ListView
элемента. Он используется в XAML, задав ViewCell.IsContextActionsLegacyModeEnabled
привязываемое свойство true
следующим образом:
<ContentPage ...
xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core">
<StackLayout Margin="20">
<ListView ItemsSource="{Binding Items}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell android:ViewCell.IsContextActionsLegacyModeEnabled="true">
<ViewCell.ContextActions>
<MenuItem Text="{Binding Item1Text}" />
<MenuItem Text="{Binding Item2Text}" />
</ViewCell.ContextActions>
<Label Text="{Binding Text}" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
Кроме того, его можно использовать из C# с помощью api fluent:
using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
...
viewCell.On<Android>().SetIsContextActionsLegacyModeEnabled(true);
Метод ViewCell.On<Android>
указывает, что эта платформа будет работать только в Android. Метод ViewCell.SetIsContextActionsLegacyModeEnabled
в Xamarin.Forms.PlatformConfiguration.AndroidSpecific
пространстве имен используется для включения ViewCell
устаревшего режима контекстного меню действий, чтобы меню контекстных действий не обновлялось при изменении выбранного ListView
элемента. Кроме того, этот метод можно использовать для возврата того, ViewCell.GetIsContextActionsLegacyModeEnabled
включен ли устаревший режим действий контекста.
На следующих снимках экрана показан ViewCell
режим устаревших действий контекста:
В этом режиме отображаемые элементы контекстного меню меню идентичны для ячейки 1 и ячейки 2, несмотря на различные элементы контекстного меню, определенные для ячейки 2.
На следующих снимках экрана показаны ViewCell
устаревшие режимы контекстных действий, которые являются поведением по умолчанию Xamarin.Forms :
В этом режиме отображаются правильные пункты меню контекстного действия для ячейки 1 и ячейки 2.