2012-05-31 4 views
9

Я хочу закрыть окно System.Windows.Window, если пользователь нажимает на него вне его. Окно отображается как диалоговое окно. Как получить клики за пределами окна wpf?Как закрыть диалоговое окно WPF, когда пользователь нажимает на него

AppointmentDetailsView.ShowDialog(); 
+2

я не хотел бы такое поведения как пользователь;) – blindmeis

+2

@blindmeis, очевидно, вы не столкнетесь с прецедентом. проверьте метровит. – frostymarvelous

ответ

2

При дальнейшей разведке я придумал решение, которое хорошо работает. Надеюсь, кому-то это будет полезно:

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

Это может сработать, но предлагаемое решение в ответе ниже @ sky-dev намного проще и работает хорошо. – sprite

12

Как насчет этого?

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

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

Это гораздо более простое решение, и оно работает. Вы также можете просто добавить обработчик события в деактивированное событие в XAML или в код: 'Deactivated = "Window_Deactivated"' или 'Deactivated + = Window_Deactivated;'/* в коде */соответственно. Затем просто вызовите close(); в обработчике. – sprite

Смежные вопросы