ContextFlyout 在10586或10240的使用

虽然ContextFlyout只能在红石以上版本使用,但可以采用附加属性的方法手动写一个

    public static class ContextFlyoutSetter
    {
        public static Windows.UI.Xaml.Controls.Primitives.FlyoutBase GetCompatibleContextFlyout(FrameworkElement obj)
        {
            return (Windows.UI.Xaml.Controls.Primitives.FlyoutBase)obj.GetValue(CompatibleContextFlyoutProperty);
        }

        public static void SetCompatibleContextFlyout(FrameworkElement obj, Windows.UI.Xaml.Controls.Primitives.FlyoutBase value)
        {
            obj.SetValue(CompatibleContextFlyoutProperty, value);
        }
        static readonly bool issupport = Windows.Foundation.Metadata.ApiInformation.IsPropertyPresent("Windows.UI.Xaml.UIElement", "ContextFlyout");
        // Using a DependencyProperty as the backing store for ContextFlyout.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty CompatibleContextFlyoutProperty =
            DependencyProperty.RegisterAttached("CompatibleContextFlyout", typeof(Windows.UI.Xaml.Controls.Primitives.FlyoutBase), typeof(FrameworkElement), new PropertyMetadata(null, CompatibleContextFlyoutChanged));
        private static void CompatibleContextFlyoutChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            var uie=obj as FrameworkElement;
            if(uie!=null)
            {
                if(issupport )
                {
                    uie.ContextFlyout = e.NewValue as Windows.UI.Xaml.Controls.Primitives.FlyoutBase;
                }
                else
                {
                    Windows.UI.Xaml.Controls.Primitives.FlyoutBase.SetAttachedFlyout(uie, e.NewValue as Windows.UI.Xaml.Controls.Primitives.FlyoutBase);
                    if (e.NewValue!=null)
                    {
                        uie.Holding += Uie_Holding;
                        uie.RightTapped += Uie_RightTapped;
                    }
                    else
                    {
                        uie.Holding -= Uie_Holding;
                        uie.RightTapped -= Uie_RightTapped;
                    }
                }
            }
        }

        private static void Uie_Holding(object sender, Windows.UI.Xaml.Input.HoldingRoutedEventArgs e)
        {
            Windows.UI.Xaml.Controls.Primitives.FlyoutBase.ShowAttachedFlyout(sender as FrameworkElement);
        }

        private static void Uie_RightTapped(object sender, Windows.UI.Xaml.Input.RightTappedRoutedEventArgs e)
        {
            Windows.UI.Xaml.Controls.Primitives.FlyoutBase.ShowAttachedFlyout(sender as FrameworkElement);
        }
    }

最后使用的时候只需要这样

                            <localControls:ContextFlyoutSetter.CompatibleContextFlyout>
                                <MenuFlyout>

                                </MenuFlyout>
                            </localControls:ContextFlyoutSetter.CompatibleContextFlyout>
原文地址:https://www.cnblogs.com/yinyue200/p/6259811.html