2012-05-31 72 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イベントに追加することもできます。 'Deactivated = "Window_Deactivated"' <! - XAML - > または 'Deactivated + = Window_Deactivated;/* in code * /それぞれです。 次にclose()を呼び出します。ハンドラの中で。 – sprite

関連する問題