ユーザーが外部の場所をクリックすると、System.Windows.Windowを閉じることができます。ウィンドウはダイアログボックスとして表示されます。 wpfウィンドウの外でクリックを受け取るにはどうすればよいですか?ユーザーが外部をクリックしたときにWPFダイアログウィンドウを閉じる方法
AppointmentDetailsView.ShowDialog();
ユーザーが外部の場所をクリックすると、System.Windows.Windowを閉じることができます。ウィンドウはダイアログボックスとして表示されます。 wpfウィンドウの外でクリックを受け取るにはどうすればよいですか?ユーザーが外部をクリックしたときにWPFダイアログウィンドウを閉じる方法
AppointmentDetailsView.ShowDialog();
さらなる調査では、うまく機能するソリューションを考え出しました。誰かが便利だといいでしょう。
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();
}
これはうまくいくかもしれませんが、以下の@ sky-devの答えの中で提案されている解決策ははるかに単純であり、うまくいきます。 – sprite
どうやってですか?
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
protected override void OnDeactivated(EventArgs e)
{
base.OnDeactivated(e);
Close();
}
}
これははるかに簡単な解決策であり、動作します。また、イベントハンドラをXAMLまたはコードのDeactivatedイベントに追加することもできます。 'Deactivated = "Window_Deactivated"' <! - XAML - > または 'Deactivated + = Window_Deactivated;/* in code * /それぞれです。 次にclose()を呼び出します。ハンドラの中で。 – sprite
私はユーザーとしてこの振る舞いを好きではないだろう;) – blindmeis
@blindmeisは明らかにあなたは、ユースケースに遭遇していません。メトロウィットをチェックする。 – frostymarvelous