c# - WPF 窗口在 ListBox 项双击事件处理程序中弹出后失去焦点

标签 c# wpf xaml

我想显示 ListBox 中某些对象的详细信息在新窗口中,因此我在 ListBoxItem 中创建并显示一个新窗口的MouseDoubleClick处理程序。

这是一个例子:

MainWindow.xaml:

<Window x:Class="Test.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ListBox>
        <ListBoxItem MouseDoubleClick="ListBoxItem_MouseDoubleClick" Content="Test" />
    </ListBox>
</Window>

MainWindow.xaml.cs:

using System.Windows;
using System.Windows.Input;

namespace Test
{
    /// <summary>
    ///     Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ListBoxItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            (new Window()).Show();
        }
    }
}

如果我双击“测试”项,则会弹出一个新窗口,然后很快失去焦点。为什么?如何防止新人失去焦点?

另外,我不想使用ShowDialog方法,因为我可能需要同时打开多个窗口。

最佳答案

在鼠标单击事件(或其他 UI 事件)中间执行 UI 操作通常会导致不良行为,就像您所看到的那样。请参阅此答案以获取解决方法:WPF TreeView restores its focus after double click

关于c# - WPF 窗口在 ListBox 项双击事件处理程序中弹出后失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29850102/

相关文章:

c# - 如何限制基于 WPF 的应用程序中的光标移动?

xaml - Xamarin.Forms:创建 SearchBar

c# - C# 何时可以推断参数的类型?

c# - 将位图图像转换为字符串格式以通过网络(LAN)发送,反之亦然

c# - RhinoMocks 使用属性的默认实现

c# - 使用动态类型

wpf - 如何使用 MVVM 应用程序在 WPF 中以编程方式设置 DataGrid 的选定项?

c# - 将集合绑定(bind)到 StackPanel

c# - 在 Xamarin Forms 中滚动时如何折叠(隐藏或向上滑动)导航栏(标题栏)?

c# - 是否有检查 WCF 服务是否在线的示例?