我有一个其中有一个窗口(例如W1)的应用程序,我希望它在打开时不阻止应用程序的处理。我已经使用W1.show()
实现了这一目标。从该窗口打开另一个窗口(W2)。
我希望它的行为类似于模式,以便它禁用父窗口W1,但不得禁用其余应用程序。
简而言之: 当W2打开时
应用程序继续运行
只有W1被禁用
我尝试过
W1.IsEnabled = false;
W2.Show();
W1.IsEnabled = true;
它在打开时将焦点移至W2,其余应用程序也继续运行,但我仍然可以使用W1,这是不正确的
如果我使用
W2.ShowDialog()
然后整个应用程序被阻止。有什么方法可以禁用仅父窗口(/所有者)吗?
答案 0 :(得分:1)
这应该回答您的问题:
private void Button_Click(object sender, RoutedEventArgs e)
{
W2.Owner = W1;
W1.IsHitTestVisible = false;
W2.Closing += W2_Closing;
W2.Show();
}
private void W2_Closing(object sender, CancelEventArgs e)
{
W1.IsHitTestVisible = true;
}
答案 1 :(得分:0)
考虑3个窗口w1
,w2
,w3
。最初显示W1
和W2
。从W1
调用W3.ShowDialog()
,这将禁用w1
和w2
,因为它们都在同一UI线程上运行。我相信您的要求是仅禁用一个w1
或w2
中的。 (在这种情况下,您要启用w2
并禁用w1
)
为此,您需要从具有STA行为的其他线程启动w2
,这样可以防止w2
被禁用
Thread newWindowThread = new Thread(new ThreadStart(ThreadStartingPoint));
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();
private void ThreadStartingPoint()
{
Window3 tempWindow = new Window3();
tempWindow.Show();
System.Windows.Threading.Dispatcher.Run();
}