Xamarin.Forms ListView 更改 ContextMenu 上的 Cell 打开
Xamarin.Forms ListView change Cell on ContextMenu open
我用Xamarin.Forms定义了一个ListView
。 ListView
在 ViewCell
内部定义了一些 ContextAction
。根据平台的不同,这些上下文操作随后会呈现给用户。在 Android 中,这是通过长按特定项目触发的。遗憾的是,此项目不会(正确)突出显示,如屏幕截图所示(我长按 第三项,遗憾的是我还不能嵌入图像)。
有没有办法在上下文菜单打开时修改单元格? 专门寻求 Android 的解决方案,但也欢迎提供一般性答案。最终目标是改进突出显示,例如通过更改单元格的背景颜色。当按下一个 ContextAction
时,修改单元格不是我要找的。
我浏览了 Xamarin.Forms 的源代码并考虑以某种方式从例如继承。 ViewCell class,但找不到在长按某个项目时会触发/调用的事件或命令。我已经建立了一个简单的存储库来说明行为:GitHub repository
最重要的代码片段
XAML
中的ListView定义
<?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>
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"));
}
}
}
无需自定义渲染器 - 您只需将以下标签添加到 styles.xml
(位置:Android 项目 > 资源 > 值 > styles.xml )
<style name="MyTheme" parent="MyTheme.Base">
<item name="android:colorLongPressedHighlight">@color/ListViewHighlighted</item>
</style>
<color name="ListViewHighlighted">#A8A8A8</color>
可在此处找到更多详细信息 post。
我用Xamarin.Forms定义了一个ListView
。 ListView
在 ViewCell
内部定义了一些 ContextAction
。根据平台的不同,这些上下文操作随后会呈现给用户。在 Android 中,这是通过长按特定项目触发的。遗憾的是,此项目不会(正确)突出显示,如屏幕截图所示(我长按 第三项,遗憾的是我还不能嵌入图像)。
有没有办法在上下文菜单打开时修改单元格? 专门寻求 Android 的解决方案,但也欢迎提供一般性答案。最终目标是改进突出显示,例如通过更改单元格的背景颜色。当按下一个 ContextAction
时,修改单元格不是我要找的。
我浏览了 Xamarin.Forms 的源代码并考虑以某种方式从例如继承。 ViewCell class,但找不到在长按某个项目时会触发/调用的事件或命令。我已经建立了一个简单的存储库来说明行为:GitHub repository
最重要的代码片段
XAML
中的ListView定义<?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>
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")); } } }
无需自定义渲染器 - 您只需将以下标签添加到 styles.xml
(位置:Android 项目 > 资源 > 值 > styles.xml )
<style name="MyTheme" parent="MyTheme.Base">
<item name="android:colorLongPressedHighlight">@color/ListViewHighlighted</item>
</style>
<color name="ListViewHighlighted">#A8A8A8</color>
可在此处找到更多详细信息 post。