【问题标题】:MenuFlyout not rising events when origin point changed原点更改时,MenuFlyout 没有上升事件
【发布时间】:2021-05-17 11:47:06
【问题描述】:

我有这段代码在应用程序的某个位置显示MenuFlyout(用户在控件上有RightTapped)。当我将MenuFlyoutf.ShowAt(sender as FrameworkElement) 但它的位置不在必须显示的位置附近(发送者控件在屏幕上相当大)。

所以,我将显示命令更改为 f.ShowAt(sender as FrameworkElement, args.Position)。 现在,MenuFlyout 显示在它应该在的位置(就在RightTap 位置的顶部),但它不会对项目上的点击事件做出反应。 MenuFlyout 隐藏,但没有关于项目的事件。

MenuFlyout f = new MenuFlyout();
MenuFlyoutItem menuFlyoutItem = new MenuFlyoutItem
{
    Text      = "Open in X1",
    IsTabStop = false,    
    Tag       = args.Location
};
menuFlyoutItem.AddHandler(TappedEvent, new TappedEventHandler(OpenInX1_Tapped), true);
f.Items.Add(menuFlyoutItem);
menuFlyoutItem = new MenuFlyoutItem
{
    Text      = "Open in X2",
    IsTabStop = false,
    Tag       = args.Location
};
menuFlyoutItem.AddHandler(TappedEvent, new TappedEventHandler(OpenInX2_Tapped), true);
f.Items.Add(menuFlyoutItem);
f.Placement = FlyoutPlacementMode.Top;
f.ShowAt(sender as FrameworkElement, args.Position);
//f.ShowAt(sender as FrameworkElement);

你为什么会这样?还有,我该如何解决?

谢谢。

【问题讨论】:

    标签: c# uwp


    【解决方案1】:

    但它不会对项目上的点击事件做出反应。 MenuFlyout 隐藏,但项目上没有事件。

    请参考此文档Tappeddocument

    Tapped 是一个路由事件。此外,元素必须将 IsTapEnabled 设置为 true 才能成为 Tapped 事件源(默认为 true)。即使父元素上的 IsTapEnabled 为 false,也可以处理父元素上的 Tapped,

    这将使菜单一次又一次地显示。对于这种情况,更好的方法是监听MenuFlyoutItemClick事件,它会随时调用。

     MenuFlyoutItem menuFlyoutItem = new MenuFlyoutItem
     {
         Text = "Open in X1",
         IsTabStop = false,
    
     };
     menuFlyoutItem.Click += new RoutedEventHandler(MenuFlyoutItem_Click1);
     f.Items.Add(menuFlyoutItem);
    

    【讨论】:

    • 改变的工作。但仍然不知道为什么在 f.ShowAt(sender as FrameworkElement, args.Position) 上添加 args.position;以这种方式影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多