在GridView中,我试图在用户右键单击某个项目时显示上下文菜单。
我试过了:
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" Width="120" Background="LightBlue">
<StackPanel.ContextFlyout>
<MenuFlyout>
<MenuFlyoutItem Text="Change color" Click="ChangeColorItem_Click" />
</MenuFlyout>
...
但是StackPanel.ContextFlyout
会抛出错误。我缺少什么?
更新
错误是:The attachable property 'ContextFlyout' was not found in type 'StackPanel'
ContextFlyout是UIElement的一个属性,StackPanel是从UIElement派生的。
答案 0 :(得分:3)
试试这个:
<DataTemplate>
<StackPanel Orientation="Vertical" Width="120" Background="LightBlue">
<FlyoutBase.AttachedFlyout>
<MenuFlyout>
<MenuFlyoutItem Text="Change color" Click="ChangeColorItem_Click" />
</MenuFlyout>
</FlyoutBase.AttachedFlyout>
</StackPanel>
</DataTemplate>
您需要使用一些代码隐藏来手动管理MenuFlyout。
答案 1 :(得分:3)
ContextFlyout是UIElement的一个属性,StackPanel是从UIElement派生的。
是的,你是对的,但是从引入的3.0版本10.0.14393.0开始,请注意这个ContextFlyout
属性是可用的。您需要检查API合约版本和设备系列版本。
对于API合约版本1.0 / 2.0,正如@Igor Damiani建议的那样,您可以使用FlyoutBase.AttachedFlyout
,例如DataContext
可以在RightTapped
事件中获取StackPanel
1}}:
private void StackPanel_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
FlyoutBase.ShowAttachedFlyout(sender as StackPanel);
var datacontext = ((FrameworkElement)e.OriginalSource).DataContext;
}
但我注意到您的MenuFlyoutItem
可能会换色,您需要的是实际访问StackPanel
或此StackPanel
内部的UIElements。如果是这样,最好将颜色绑定到实现INotifyPropertyChanged
接口的属性。