在某处打开窗口或上下文菜单会使弹出元素无法聚焦(按钮除外)
本文关键字:聚焦 按钮 元素 开窗口 上下文 菜单 在某处 | 更新日期: 2023-09-27 18:33:54
我们有几个弹出窗口,如下所示:
<Popup Name="Popup1" AllowsTransparency="True" Placement="Center" PlacementTarget="{Binding ElementName=FirstGrid}" StaysOpen="True">
<i:Interaction.Behaviors>
<behavior:MouseDragPopupBehavior/>
</i:Interaction.Behaviors>
<Popup.Style>
<Style TargetType="{x:Type Popup}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsPopupVisible}" Value="True">
<Setter Property="IsOpen" Value="True"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding IsPopupVisible}" Value="False">
<Setter Property="IsOpen" Value="False"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Popup.Style>
<ItemsControl ItemsSource="{Binding CenterView}" Grid.Row="2">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Popup>
基本上,这些弹出窗口是可拖动的,其可见性绑定到视图模型。ItemsPanel 用于添加用户控件(或者准确地说,是绑定到视图的视图模型)。这通常效果很好。
问题是当我们在其他地方打开上下文菜单或另一个窗口时。这会将焦点带到该窗口或菜单上,我们可以再次将焦点放在窗口上的唯一方法是关闭它并重新打开它。
编辑:我忘了提到聚焦窗口并不完全是问题,而是聚焦弹出窗口中的元素:textbox
等buttons
。
我们设法在 Windows 10 和 8.1 中解决了这个问题,方法是在我们绑定到 ItemsControl 的每个视图上使用此代码:
private void Grid_MouseEnter(object sender, MouseEventArgs e)
{
if(!Application.Current.MainWindow.IsActive)
{
Application.Current.MainWindow.Activate();
this.Focus();
}
}
但它仍然不适用于我们的测试 Windows 8 或 Windows 7 PC,奇怪的是!
有什么建议吗?
我们通过Application.Current.MainWindow.Activate();
挂接 UserControl 主网格的MouseDown
、MouseEnter
和MouseMove
以及每个子控件(文本框、列表框等)来解决此问题。