我们有几个看起来像这样的弹出窗口:
<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用于添加UserControls(或者确切地说,是绑定到Views的ViewModel)。这通常很有效。
问题是当我们在其他地方打开上下文菜单或其他窗口时。这会将焦点放在该窗口或菜单上,我们可以再次关注Window的唯一方法是关闭它并重新打开它。
编辑:我忘了提到聚焦窗口不是问题,而是将元素集中在弹出窗口中:textbox
等等。buttons
没问题!
我们设法通过在绑定到ItemsControl的每个View上使用此代码来解决Windows 10和8.1的这个问题:
private void Grid_MouseEnter(object sender, MouseEventArgs e)
{
if(!Application.Current.MainWindow.IsActive)
{
Application.Current.MainWindow.Activate();
this.Focus();
}
}
但奇怪的是,它仍无法在我们的测试Windows 8或Windows 7 PC上运行!
有什么建议吗?
答案 0 :(得分:0)
我们通过在UserControl的主网格的Application.Current.MainWindow.Activate();
,MouseDown
和MouseEnter
以及每个子控件(文本框,列表框,等)。