2012-05-31 20 views

cevap

2

Daha fazla keşifle birlikte iyi çalışan bir çözüm buldum. Umarım birisi yararlı bulur:

RadWindow PopupWindow; 
public SampleView() 
{ 
    InitializeComponent(); 
    PopupWindow = new RadWindow { Header = "Details", Name = "radWindow" }; 
    PopupWindow.Loaded += new RoutedEventHandler(PopupWindow_Loaded); 
} 
void PopupWindow_Loaded(object sender, RoutedEventArgs e) 
{ 
    Canvas canvas = Framework.Traversal.FirstVisualAncestorOfType<Canvas>(PopupWindow); 
    canvas.MouseLeftButtonDown -= canvas_MouseLeftButtonDown; 
    canvas.MouseLeftButtonDown += canvas_MouseLeftButtonDown; 
} 
void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    Point mousepoint = e.GetPosition(null); 
    var elements = VisualTreeHelper.FindElementsInHostCoordinates(mousepoint, PopupWindow); 
    if (elements.Count() == 0) 
     PopupWindow.Close(); 
} 
+0

Bu işe yarayabilir, ancak aşağıdaki çözümde önerilen çözüm, sky-dev tarafından çok daha basit ve iyi çalışıyor. – sprite

12

Bu nasıl olur?

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnDeactivated(EventArgs e) 
    { 
     base.OnDeactivated(e); 
     Close(); 
    } 
} 
+2

Bu daha basit bir çözümdür ve çalışır. Ayrıca XAML'de veya Devre dışı bırakılan etkinliğe bir olay işleyicisi ekleyebilirsiniz: 'Deactivated = "Window_Deactivated"' veya 'Deactivated + = Window_Deactivated;'/* kodunda */sırasıyla. Ardından kapat(); işleyicide. – sprite

İlgili konular