我有一个控件正在使用一个弹出窗口,其中包含一些 WPF 控件,并且 StaysOpen="True"。问题是当应用程序没有焦点时单击弹出窗口时,应用程序没有获得焦点。我做了一些研究,似乎这可能是因为弹出窗口是用于菜单的,所以它们没有连接所有正确的 Windows 消息处理程序。这是演示问题的准系统示例:
<Window x:Class="TestWindowPopupBehavior.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:TestWindowPopupBehavior="clr-namespace:TestWindowPopupBehavior" Title="MainWindow" Height="350" Width="525">
<Grid>
<Popup StaysOpen="True" IsOpen="True" Placement="Center">
<ListBox>
<TextBlock>123</TextBlock>
<TextBlock>123</TextBlock>
<TextBlock>123</TextBlock>
<TextBlock>123</TextBlock>
<TextBlock>123</TextBlock>
<TextBlock>123</TextBlock>
</ListBox>
</Popup>
</Grid>
</Window>
- 运行应用程序。
- 与列表框交互,应该可以正常工作。
- 切换到另一个应用程序。
- 在应用程序未激活时单击列表框。没发生什么事
- 单击列表框外的应用程序。
- 单击列表框。它现在正在工作。
我希望在第 4 步中发生的事情是应用程序将获得焦点,并且列表框将选择新项目。
这个问题是否有任何解决方法,或者我缺少什么明显的东西?我正在考虑用成熟的窗口重写整个弹出代码,并重新实现我们的行为,但这似乎真的很复杂,只是为了解决这样的一个小问题。