private static void OnPreviewMouseButtonOutsideCapturedElement(object sender, MouseButtonEventArgs e) { var instance = sender as ApplicationBar; var source = e.OriginalSource as DependencyObject; if (instance != null && source != null && !instance.StaysOpen) { var visualParent = VisualTreeHelperExtensions.FindParent <ApplicationBar>(source); var logicalParent = LogicalTreeHelperExtensions.FindParent <ApplicationBar>(source); if (!(Equals(instance, visualParent) || Equals(instance, logicalParent))) { instance.IsOpen = false; } } }
private static void OnLostMouseCapture(object sender, MouseEventArgs e) { var instance = sender as ApplicationBar; var source = e.OriginalSource as DependencyObject; if (instance != null && source != null && !instance.StaysOpen) { var visualParent = VisualTreeHelperExtensions.FindParent <ApplicationBar>(source); var logicalParent = LogicalTreeHelperExtensions.FindParent <ApplicationBar>(source); if (Equals(instance, visualParent) || Equals(instance, logicalParent) || (Mouse.Captured == null && instance.IsOpen)) { Mouse.Capture(instance, CaptureMode.SubTree); e.Handled = true; } } }