Я оценил подход к созданию события RightClicked в части UWP компонента RadListView и предоставил это уведомление в элемент управления XamarinForms. Технически это возможно, но во время написания связанного с UWP класса, который должен обеспечивать уведомление, является внутренним. Это означает, что использование UWP ListViewItems для обеспечения этого уведомления невозможно.
Поскольку, скорее всего, вы уже установили пользовательский ItemTemplate для RadListView в XamarinForms, вы можете рассмотреть возможность создания пользовательского Элемент управления XamrinForms (например, «Сетка», «Рамка», «Граница», «Метка ...»), который имеет настраиваемый модуль визуализации для UWP. Этот рендерер может подписаться на событие UIElement.RightTapped и повторно передать уведомление в часть элемента управления XamarinForms.
public class MyRightClickGridRenderer : ViewRenderer<MyRightClickGrid, Grid>
{
protected override void OnElementChanged(ElementChangedEventArgs<MyRightClickGrid> e)
{
if (this.Element != null)
{
if (this.Control == null)
{
var uwpGrid = new Grid { IsRightTapEnabled = true, Background = new SolidColorBrush(Colors.Transparent) };
uwpGrid.RightTapped += UwpGrid_RightTapped;
this.SetNativeControl(uwpGrid);
}
}
if (this.Element == null)
{
if (this.Control != null)
{
((Grid)this.Control).RightTapped -= UwpGrid_RightTapped;
}
}
}
private void UwpGrid_RightTapped(object sender, Windows.UI.Xaml.Input.RightTappedRoutedEventArgs e)
{
((MyRightClickGrid)this.Element).RaiseRightClicked(sender);
}
}
, а в проекте XamarinForms вы можете создать нечто подобное
public class MyRightClickGrid : Grid
{
public event EventHandler<TappedEventArgs> RightTapped;
public void RaiseRightClicked(object sender)
{
this.RightTapped?.Invoke(this, new TappedEventArgs(null));
}
}
После создания этого элемента управления его можно использовать в XAML следующим образом:
<telerikListView:RadListView>
<telerikListView:RadListView.ItemTemplate>
<DataTemplate>
<telerikListViewPrimitives:ListViewTemplateCell>
<telerikListViewPrimitives:ListViewTemplateCell.View>
<MyNamespace:MyRightClickGrid >
***
</MyNamespace:MyRightClickGrid >
</telerikListViewPrimitives:ListViewTemplateCell.View>
</telerikListViewPrimitives:ListViewTemplateCell>
</DataTemplate>
</telerikListView:RadListView.ItemTemplate>
</telerikListView:RadListView>
Дайте мне знать, если это работает для вас.
PS Одно из преимуществ этого подхода является то, что вы можете использовать тот же рендерер, чтобы получить позицию, где произошел щелчок. Эта функция все еще не поддерживается XamarinForms, и вы должны создать аналогичные логи c для каждой платформы, чтобы получить эту информацию.