我正在尝试将MenuFlyout添加到我的UWP应用程序以支持控制器。问题是我无法弄清楚如何确定哪个ListViewItem实际触发了事件。
代码隐藏
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
this.DataContext = new List<String>{ "Item 1", "Item 2", "Item 3"};
}
private void ChoiceA_Click(object sender, RoutedEventArgs e)
{
// What was clicked?
}
}
XAML
<ListView ItemsSource="{Binding}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="ContextFlyout">
<Setter.Value>
<MenuFlyout>
<MenuFlyoutItem Text="Choice A" Click="ChoiceA_Click" />
<MenuFlyoutItem Text="Choice B" />
</MenuFlyout>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
答案 0 :(得分:1)
我刚刚使用本地计算机和移动模拟器测试了您的代码,您的ListView
只能在PC上显示,只需点击OriginalSource
,然后这是一个解决方案,您可以找到{{ 1}}在RightTapped
ListView
事件中,然后获取此DataContext
的{{1}},例如:
OriginalSource
答案 1 :(得分:0)
试试这个解决方案。首先,您需要修改XAML,因为类ListViewItem没有属性ContextFlyout。你需要在ItemTemplate中使用FlyoutBase.AttachedFlyout。
<ListView ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Tapped="TextBlock_Tapped">
<FlyoutBase.AttachedFlyout>
<MenuFlyout>
<MenuFlyoutItem Text="{Binding}" IsHitTestVisible="False" FontWeight="Bold" FontSize="24" />
<MenuFlyoutItem Text="Choice A" Click="MenuFlyoutItem_Click" />
<MenuFlyoutItem Text="Choice B" />
</MenuFlyout>
</FlyoutBase.AttachedFlyout>
</TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这里的代码隐藏:
公共密封部分类MainPage:Page { 公共MainPage() { this.InitializeComponent(); this.DataContext = new List {“Item 1”,“Item 2”,“Item 3”}; }
private async void MenuFlyoutItem_Click(object sender, RoutedEventArgs e)
{
var fe = sender as FrameworkElement;
var value = fe.DataContext.ToString();
await new MessageDialog(value).ShowAsync();
}
private void TextBlock_Tapped(object sender, TappedRoutedEventArgs e)
{
var fe = sender as FrameworkElement;
var menu = Flyout.GetAttachedFlyout(fe);
menu.ShowAt(fe);
}
}
您需要检测ListView中每个项目的ItemTapped事件,以便显示菜单。
答案 2 :(得分:0)
绑定到Opening
的{{1}}事件。在事件处理程序中,MenuFlyout
是sender
本身。在那里,您会找到指向MenuFlyout
的{{1}}属性。
根据您的示例,您的XAML可能如下所示:
Target
你的代码背后是这样的:
ListViewItem