我希望我的窗口在仅限于我的应用程序中处于最顶部。如果我设置窗口的TopMost属性,它将变为所有应用程序窗口的顶部,但我不想这样。
我希望我的窗口在仅限于我的应用程序中处于最顶部。如果我设置窗口的TopMost属性,它将变为所有应用程序窗口的顶部,但我不想这样。
你需要设置窗口的所有者属性。
你可以通过showdialog显示一个窗口来阻止你的主窗口,或者将其正常显示并使其在所有者窗口上方而不阻塞所有者窗口。
这是代码后台部分的一个示例 - 我省略了所有明显的部分:
namespace StackoverflowExample
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
void NewWindowAsDialog(object sender, RoutedEventArgs e)
{
Window myOwnedDialog = new Window();
myOwnedDialog.Owner = this;
myOwnedDialog.ShowDialog();
}
void NormalNewWindow(object sender, RoutedEventArgs e)
{
Window myOwnedWindow = new Window();
myOwnedWindow.Owner = this;
myOwnedWindow.Show();
}
}
}
myOwnedDialog.ShowInTaskbar = false;
添加到 NewWindowAsDialog
中。 - mkb你可以使用一个弹出窗口来实现始终置顶的效果,将其装饰得与窗口类似,并通过处理主窗口的LocationChanged事件完全附加到应用程序中,然后将Popup的IsOpen属性设置为false。
我希望你想要的是这样的效果:
Window1 window;
private void Button_Click(object sender, RoutedEventArgs e)
{
window = new Window1();
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.Topmost = true;
this.LocationChanged+=OnLocationchanged;
window.Show();
}
private void OnLocationchanged(object sender, EventArgs e)
{
if(window!=null)
window.Close();
}
希望这有所帮助!!!
CustomWindow cw = new CustomWindow();
cw.Owner = Application.Current.MainWindow;
cw.ShowInTaskbar = false;
cw.ShowDialog() ;
在XAML中很容易实现,令人惊讶的是还没有人发布过这个答案。在下面的示例中,Window
被定义在一个ResourceLibrary
中(注意x:Key
),但你也可以将此XAML绑定用于独立的类似Page
的WPF资源。
<Window x:Key="other_window"
Topmost="{Binding Source={x:Static Application.Current},Path=MainWindow.IsActive,Mode=OneWay}">
<TextBlock Text="OTHER WINDOW" />
</Window>
Public Overloads Sub Show(Caller As Window)
Me.Owner = Caller
MyBase.Show()
End Sub
然后在主窗口中调用您重载的Show()方法:
Dim Popup As PopupWindow
Popup = New PopupWindow
Popup.Show(Me)
使用Activate()方法。它会尝试将窗口置于前台并激活它。 例如:Window wnd = new xyz(); wnd.Activate();
private void Window_Activated(object sender, EventArgs e)
{
Topmost = true;
}
private void Window_Deactived(object sender, EventArgs e)
{
if(Owner == null || Owner.IsActive)
return;
bool hasActiveWindow = false;
foreach(Window ownedWindow in Owner.OwnedWindows)
{
if(ownedWindow.IsActive)
hasActiveWindow = true;
}
if(!hasActiveWindow)
Topmost = false;
}
这对我非常有效。希望这对其他人有所帮助。:o)
GotKeyboardFocus
LostKeyboardFocus
以这种方式:
WiondowOfMyApp_GotKeyboardFocus(object sender, System.Windows.Input.KeyboardFocusChangedEventArgs e)
{
windowThatShouldBeTopMost.TopMost = true;
}
WiondowOfMyApp_LostKeyboardFocus(object sender, System.Windows.Input.KeyboardFocusChangedEventArgs e)
{
windowThatShouldBeTopMost.TopMost = false;
}
有几个线程,甚至有一个“最顶层”的标记。搜索它,或直接访问这篇文章看起来不错:
我是楼主。经过一些研究和测试,答案是:
不,没有办法完全做到那样。