2012-05-31 14 views
9

Desidero chiudere System.Windows.Window se l'utente fa clic in qualsiasi punto al di fuori di esso. La finestra è mostrata come una finestra di dialogo. Come ricevo i clic al di fuori di una finestra wpf?come chiudere una finestra di dialogo WPF quando l'utente fa clic all'esterno di esso

AppointmentDetailsView.ShowDialog(); 
+2

io non vorrei questo comportamento come utente;) – blindmeis

+2

@blindmeis ovviamente non hanno incontrato un caso d'uso. controlla metrotwit. – frostymarvelous

risposta

2

Dopo un'ulteriore esplorazione, ho trovato una soluzione che funziona bene. Speriamo che qualcuno lo trovi utile:

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

Questo potrebbe funzionare, ma la soluzione suggerita nella risposta di sotto di @ sky-dev è molto più semplice e funziona bene. – sprite

12

Che ne dici di questo?

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

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

Questa è una soluzione molto più semplice e funziona. Puoi anche aggiungere un gestore di eventi all'evento disattivato in XAML o nel codice: 'Disattivato = "Disattivato da finestra"' o 'Disattivato + = Disattivato da finestra';/* nel codice */rispettivamente. Quindi chiama close(); nel conduttore. – sprite

Problemi correlati