コード例 #1
0
        // Token: 0x06005E7F RID: 24191 RVA: 0x001A7C44 File Offset: 0x001A5E44
        private static void OnLostMouseCapture(object sender, MouseEventArgs e)
        {
            MenuBase menuBase = sender as MenuBase;

            if (Mouse.Captured != menuBase)
            {
                if (e.OriginalSource == menuBase)
                {
                    if (Mouse.Captured == null || !MenuBase.IsDescendant(menuBase, Mouse.Captured as DependencyObject))
                    {
                        menuBase.IsMenuMode = false;
                        return;
                    }
                }
                else if (MenuBase.IsDescendant(menuBase, e.OriginalSource as DependencyObject))
                {
                    if (menuBase.IsMenuMode && Mouse.Captured == null && SafeNativeMethods.GetCapture() == IntPtr.Zero)
                    {
                        Mouse.Capture(menuBase, CaptureMode.SubTree);
                        e.Handled = true;
                        return;
                    }
                }
                else
                {
                    menuBase.IsMenuMode = false;
                }
            }
        }
コード例 #2
0
        //-------------------------------------------------------------------
        //
        //  Private Methods
        //
        //-------------------------------------------------------------------

        #region Private Methods

        /// <summary>
        ///     Called when this element loses capture.
        /// </summary>
        private static void OnLostMouseCapture(object sender, MouseEventArgs e)
        {
            MenuBase menu = sender as MenuBase;

            // need a better solution for subcapture!

            // Use the same technique employed in ComoboBox.OnLostMouseCapture to allow another control in the
            // application to temporarily take capture and then take it back afterwards.

            if (Mouse.Captured != menu)
            {
                if (e.OriginalSource == menu)
                {
                    // If capture is null or it's not below the menu, close.
                    // More workaround for task 22022 -- check if it's a descendant (following Logical links too)
                    if (Mouse.Captured == null || !MenuBase.IsDescendant(menu, Mouse.Captured as DependencyObject))
                    {
                        menu.IsMenuMode = false;
                    }
                }
                else
                {
                    if (MenuBase.IsDescendant(menu, e.OriginalSource as DependencyObject))
                    {
                        // Take capture if one of our children gave up capture
                        if (menu.IsMenuMode && Mouse.Captured == null && MS.Win32.SafeNativeMethods.GetCapture() == IntPtr.Zero)
                        {
                            Mouse.Capture(menu, CaptureMode.SubTree);
                            e.Handled = true;
                        }
                    }
                    else
                    {
                        menu.IsMenuMode = false;
                    }
                }
            }
        }
コード例 #3
0
 // Token: 0x06005E7A RID: 24186 RVA: 0x001A7A75 File Offset: 0x001A5C75
 private bool IsDescendant(DependencyObject node)
 {
     return(MenuBase.IsDescendant(this, node));
 }