在某处打开窗口或上下文菜单会使弹出元素无法对焦(按钮除外)

时间:2016-02-10 04:13:39

标签: c# wpf windows mvvm

我们有几个看起来像这样的弹出窗口:

   <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上运行!

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我们通过在UserControl的主网格的Application.Current.MainWindow.Activate();MouseDownMouseEnter以及每个子控件(文本框,列表框,等)。