我希望我的窗口只能在我的应用程序中的所有其他窗口之上.如果我设置窗口的TopMost属性,它将变为所有应用程序的所有窗口之上,我不希望这样.
Joh*_*nes 42
您需要设置窗口的所有者属性.
您可以通过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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
vik*_*iky 15
相反,你可以使用一个总是TopMost的Popup,将它装饰成类似于Window并将它完全附加到你的Application处理主窗口的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();
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!!!
小智 11
CustomWindow cw = new CustomWindow();
cw.Owner = Application.Current.MainWindow;
cw.ShowInTaskbar = false;
cw.ShowDialog() ;
Run Code Online (Sandbox Code Playgroud)
在XAML中很容易做到这一点,并且感到惊讶的是没有人发布此答案。在下面的示例中,Window在ResourceLibrary(请注意,x:Key)中定义了,但是您也可以在独立的Page样式WPF资源上使用此XAML绑定。
<Window x:Key="other_window"
Topmost="{Binding Source={x:Static Application.Current},Path=MainWindow.IsActive,Mode=OneWay}">
<TextBlock Text="OTHER WINDOW" />
</Window>
Run Code Online (Sandbox Code Playgroud)
小智 5
在弹出窗口中,使用参数重载方法 Show():
Public Overloads Sub Show(Caller As Window)
Me.Owner = Caller
MyBase.Show()
End Sub
Run Code Online (Sandbox Code Playgroud)
然后在主窗口中,调用重载方法 Show():
Dim Popup As PopupWindow
Popup = New PopupWindow
Popup.Show(Me)
Run Code Online (Sandbox Code Playgroud)
最好的方法是将这两个事件设置为应用的所有窗口:
GotKeyboardFocus
LostKeyboardFocus
Run Code Online (Sandbox Code Playgroud)
通过这种方式:
WiondowOfMyApp_GotKeyboardFocus(object sender, System.Windows.Input.KeyboardFocusChangedEventArgs e)
{
windowThatShouldBeTopMost.TopMost = true;
}
WiondowOfMyApp_LostKeyboardFocus(object sender, System.Windows.Input.KeyboardFocusChangedEventArgs e)
{
windowThatShouldBeTopMost.TopMost = false;
}
Run Code Online (Sandbox Code Playgroud)
有几个线程,甚至还有一个“最顶层”标签。搜索一下,或者直接转到这篇看起来不错的帖子:
| 归档时间: |
|
| 查看次数: |
93487 次 |
| 最近记录: |