我正在使用Window.ShowDialog()在我的WPF(MVVM)应用程序中打开一个模态窗口,但它允许我使用Windows任务栏(Windows 7)导航到其他窗口.
考虑一下:我在我的应用程序中打开了3个非模态窗口.现在其中一个打开一个模态窗口使用Window.ShowDialog().我也设置Application.MainWindow为模态窗口的所有者.这是因为我使用MVVM消息传递并且消息处理程序打开一个新窗口是集中的App.xaml.cs.窗口打开模态 - 没有问题.但是,Windows 7允许我从任务栏切换到其他应用程序窗口.这导致模态窗口落在另一个窗口后面的情况,我不希望这样.
只要我打开模态,我就无法在其他窗口上做任何事情,但如果模态窗口始终保持在顶部,只要打开它就会很好.有没有办法在模态打开时禁用任务栏切换?仅供参考 - 从应用程序启动的所有打开的窗口在任务栏上显示为单独的条目.
提前致谢!
use*_*116 61
没有任何代码可以作为基础,但听起来你已经在Window你创建的东西上留下了一些属性,并期望ShowDialog应用额外的"对话框"语义:
Window window = new Window()
{
Title = "Modal Dialog",
ShowInTaskbar = false, // don't show the dialog on the taskbar
Topmost = true, // ensure we're Always On Top
ResizeMode = ResizeMode.NoResize, // remove excess caption bar buttons
Owner = Application.Current.MainWindow,
};
window.ShowDialog();
Run Code Online (Sandbox Code Playgroud)
小智 11
只需将Window的owner属性设置为调用窗口即可.然后在任务栏中激活WPF应用程序不仅会激活MainWindow,还会激活模态子窗口并将其置于前端.
ChildWindow C = new ChildWindow();
C.Owner = this;
C.ShowDialog();
Run Code Online (Sandbox Code Playgroud)
koa*_*lix 10
将Topmost设置为True(Topmost = True)会使对话框位于系统中所有窗口的顶部(不仅仅是在应用程序中).
因此,您可以尝试在主窗口中注册Activated事件:
Activated += WindowActivated;
Run Code Online (Sandbox Code Playgroud)
每当应用程序的另一个主窗口变为活动状态时,激活模式对话框的所有者窗口.
private void WindowActivated(object sender, EventArgs e)
{
Window window = Application.Current.Windows.OfType<YourMainWindow>().FirstOrDefault(p => p != this && !p.IsActive && p.OwnedWindows.Count > 0);
if (window != null)
{
window.Activate();
}
}
Run Code Online (Sandbox Code Playgroud)
这个简单的hack假设你的所有子窗口都是模态的,但你可以编写一个更复杂的逻辑.
| 归档时间: |
|
| 查看次数: |
49794 次 |
| 最近记录: |