我有一个控件,它使用一个带有一些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>
Run Code Online (Sandbox Code Playgroud)
我期望在步骤4中发生的是应用程序将获得焦点,并且列表框将选择新项目.
这个问题是否有任何变通方法,或者我遗漏的一些明显的东西?我正在考虑用完整的窗口重写整个弹出代码,并重新实现我们的行为,但这似乎很复杂只是为了修复这样的小问题.
如果处理MouseLeftButtonDown事件,则可以调用Window.Activate()方法.但是你应该为每个元素写出来 - Popup对于所有TextBlock的元素.
你可以遇到的问题是在Windows上你可以交换鼠标按钮,左边是正确的,反之亦然(但我不知道它是如何工作的),所以,你可能需要处理MouseRightButtonDown事件.
| 归档时间: |
|
| 查看次数: |
1776 次 |
| 最近记录: |