C# 为什么窗口突然失去焦点? 脚本
考虑以下场景: 您可以在WPF中启动一个应用程序C# 为什么窗口突然失去焦点? 脚本,c#,wpf,xaml,focus,C#,Wpf,Xaml,Focus,考虑以下场景: 您可以在WPF中启动一个应用程序 主窗口打开(非模式)Window1(属于MainWindow) 将焦点更改为其他窗口(例如,VisualStudio) 当其他应用程序具有焦点时,按下Window1中的按钮 Window1显示一个消息框 你把留言盒关上 效果:你们的主窗口突然位于你们在第二步选择的窗口下方 图像: 第一步 步骤2 步骤3 步骤4 资料来源: MainWindow.xaml MainWindow.xaml.cs 名称空间WpfApp1 { ///
Window1
(属于MainWindow
)- 当其他应用程序具有焦点时,按下
Window1中的按钮
- Window1显示一个消息框
MainWindow.xaml.cs
名称空间WpfApp1
{
///
///MainWindow.xaml的交互逻辑
///
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
Window1 Window1=新的Window1();
window1.Owner=this;
window1.Show();
}
}
}
Window1.xaml
Window1.xaml.cs
名称空间WpfApp1
{
///
///Window1.xaml的交互逻辑
///
公共部分类Window1:Window
{
公共窗口1()
{
初始化组件();
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
MessageBox.Show(“测试”);
Close();
}
}
}
问题:
从另一个窗口关闭messagebox后,如何在主窗口中保持焦点?当您按预期打开新窗体时,旧窗口将失去控制,但是:在关闭旧窗口之前,您需要执行类似于
Form1.Current.focus()的操作代码>。您必须将Form1的实例传递给子窗体。因此,在调用show之前,在预览窗体上创建一个设置的属性。然后从预览表单的实例访问主表单的实例。我更新了我的评论。@Joel看起来这样行得通。只是一个上升,因为Window1
属于MainWindow
,调用this.Owner.Focus()
就足够了。要我将其作为答案提交吗?如果对Owner使用重载会发生什么?
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<StackPanel Orientation="Vertical">
<TextBox />
<Button Content="Open window" Click="Button_Click" />
</StackPanel>
</Grid>
</Window>
namespace WpfApp1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Window1 window1 = new Window1();
window1.Owner = this;
window1.Show();
}
}
}
<Window x:Class="WpfApp1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="Window1" Height="450" Width="800" ShowInTaskbar="False">
<Grid>
<Button Click="Button_Click"/>
</Grid>
</Window>
namespace WpfApp1
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Test");
Close();
}
}
}