C# 组合框 GotFocus

2024-01-25

我有一个 C#ComboBox使用 WPF。我有在以下情况下执行的代码ComboBox's GotFocus被激活。问题是GotFocus每次从以下位置进行选择时都会执行事件ComboBox。例如,GotFocus当您第一次点击时执行ComboBox然后当您做出选择时,即使您没有单击任何其他控件。

如果在列表中进行选择,是否可以阻止此事件触发,或者事件处理程序中是否有标志或其他内容可用于确定是否GotFocus由于用户选择列表中的项目而触发了事件处理程序?


您可以通过下一步验证来解决这个问题:

private void myComboBox_GotFocus(object sender, RoutedEventArgs e)
{
    if (e.OriginalSource.GetType() == typeof(ComboBoxItem))
        return;
    //Your code here
}

此代码将过滤项目中的所有焦点事件(因为它们使用气泡路由事件)。但还有另一个问题 - WPF ComboBox 焦点的特定行为:当您打开包含项目的下拉列表时,您的 ComboBox 会失去焦点而项目会获得焦点。当您选择某个项目时 - 项目失去焦点并且组合框返回。下拉列表就像另一个控件。您可以通过简单的代码看到这一点:

private void myComboBox_GotFocus(object sender, RoutedEventArgs e)
{
    if (e.OriginalSource.GetType() != typeof(ComboBoxItem))
    {
        Trace.WriteLine("Got " + DateTime.Now);
    }
}

private void myComboBox_LostFocus(object sender, RoutedEventArgs e)
{
    if (e.OriginalSource.GetType() != typeof(ComboBoxItem))
    {
        Trace.WriteLine("Lost " + DateTime.Now);
    }
}

因此,无论如何,您至少会收到两个焦点事件:当您选择 ComboBox 时以及当您在其中选择某些内容时(焦点将返回到 ComboBox)。

要过滤选择项目后返回的焦点,您可以尝试使用DropDownOpened/DropDownClosed带有一些字段标志的事件。

所以最终的代码只有 1 个获得焦点的事件:

private bool returnedFocus = false;

private void myComboBox_GotFocus(object sender, RoutedEventArgs e)
{
    if (e.OriginalSource.GetType() != typeof(ComboBoxItem) && !returnedFocus)
    {
        //Your code.
    }
}

private void myComboBox_LostFocus(object sender, RoutedEventArgs e)
{
    if (e.OriginalSource.GetType() != typeof(ComboBoxItem))
    {
        ComboBox cb = (ComboBox)sender;
        returnedFocus = cb.IsDropDownOpen;
    }
}

从这些示例中选择您的应用程序实际需要的更多内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 组合框 GotFocus 的相关文章

随机推荐

  • Python 和 Rust 之间零拷贝共享 Polars 数据帧的示例?

    我有一个Python函数 例如 def add data input df 对 input df Polars 数据框 进行一些操作 例如用新值填充某些列 我想在 Rust 函数中使用这个函数 input df 可能有几十兆字节大 所以我想
  • 使用 process.start 打开文本文件

    在计算皮尔逊相关并将结果写入文本文件后 我一直试图从系统中打开一个文本文件 但到目前为止 由于某种原因 代码没有打开任何记事本文件 我尝试打开其他文件 它们可以工作很好 但 txt 文件没有专门打开 甚至 docx 文件也使用相同的代码打开
  • 允许递归构造函数可能有什么好处(如果有)?

    在 Java 中 构造函数不能是递归的 编译时错误 递归构造函数调用 假设我们没有这个限制 要记住的事情 构造函数的返回类型为 void 由于它是一个 void 方法 因此您无法利用递归的完整功能 构造函数可以使用 this 调用自身 或任
  • FileChannel#force 和缓冲

    我现在想澄清一下 并在 FileOutputStream 和 FileChannel 之间画出一些相似之处 所以首先 似乎使用标准 Java io 写入文件的最有效方法是使用用 BufferedOutputStream 包装的 FileOu
  • WPF MVVM取消窗口关闭

    我是 WPF 和 MVVM 新手 我想最小化窗口而不是关闭它 换句话说 我想取消Closing窗口事件并最小化该窗口 我应该如何以 MVVM 方式进行操作 如果相关的话 最后我会设置ShowInTaskbar to false并使用WinF
  • 刷新有嵌套路由的页面时出现“404 not found”,因为Vite没有将所有路由重定向到index.html

    我可以使用 React 路由器useNavigate钩子去一个嵌套的路线 比如localhost 3000 nested route 但是一旦重新加载 我就会收到 404 未找到错误 因为它正在尝试查找localhost 3000 nest
  • 键绑定的 Atom 数据语法

    有人可以完整解释 Atom 的数据语法属性 用于键绑定选择器 的语法吗 例如 有什么区别 data grammar source example and data grammar source example 另外 如何指定多种语法 例如
  • 删除重复项,但忽略空值

    所以我知道你可以使用类似的方法来删除重复的行 the data drop duplicates subset the key 然而 如果the key对于某些值来说为 null 如下所示 the key C D 1 NaN 2 NaN 3
  • Swift 包管理器找不到模块

    我正在尝试熟悉 Swift 包管理器 这就是我所做的 swift package init type executable 在 Package swift 中添加了依赖项 swift build 一切都很好 但在我尝试之后import De
  • 禁用反应形式的输入字段

    我已经尝试遵循此处其他答案的示例 但没有成功 我创建了一个反应式表单 即动态 并且我想在任何给定时间禁用某些字段 我的表单代码 this form this fb group name Validators required options
  • SQLite 的 System.AccessViolationException

    现在 我正在处理这个错误 An unhandled exception of type System AccessViolationException occurred in Unknown Module Additional inform
  • 为什么 scala 需要存在类型来限制泛型界限?

    具有以下类层次结构 trait Provider A def get Seq A abstract class ProviderImpl A extends Provider A final override def get Seq A S
  • 在JavaFX中实现只读样式?

    我想要具有不同状态的实体 控件或属性 这些状态可以通过 CSS 着色 例如 考虑 TextField 它可以包含两种类型的值 正常值和错误值 一旦包含错误值 应显示 红色 但实际的颜色应该可以由 CSS 定义 这可以实施吗 我发现了很多St
  • 使用 FileHandler 进行 Django 日志记录不起作用

    我正在 django 项目中使用下面的日志记录设置 也使用sentry raven 哨兵 乌鸦位工作正常 但文件日志记录却不行 创建一个空日志文件 但每当我使用logging info foo 日志文件中没有任何内容 即它保持为空 有什么建
  • Imgur API BUG 图片上传请求过多

    我正在通过 Imgur API 上传图像 https apidocs imgur com https apidocs imgur com 但我收到 请求太多 错误 429 即使前一个请求返回 X Ratelimit Userremainin
  • 使用 jqGrid 将列显示为行

    有没有办法将列显示为行 因此 行数代表我们尝试显示的对象的属性数量 列数代表返回的记录数 在我的情况下 它始终是一条记录 Picture 我尝试寻找现有的答案 但还没有找到 我也尝试过使用格式化程序 但我想它们仅用于格式化指定的单元格 而不
  • UIImageView IOS中间的透明圆圈

    I need to make UIImageView transparent at the Middle Position Round Circle See attached image I should be able to see th
  • Swing 方法类似于 HTML5 的 canvas.putImageData(arrayOfPixels, 0,0)

    我有一些 Javascript 代码作用于如下定义的像素数组 screen width 160 height 144 data new Array 160 144 4 canvas putImageData GPU scrn 0 0 其中
  • Adobe CQ/AEM - 触发编辑后处理程序

    当我在组件编辑器对话框中选择 确定 时 组件会重新绘制自身 假设我已经设置了 cq editConfig xml
  • C# 组合框 GotFocus

    我有一个 C ComboBox使用 WPF 我有在以下情况下执行的代码ComboBox s GotFocus被激活 问题是GotFocus每次从以下位置进行选择时都会执行事件ComboBox 例如 GotFocus当您第一次点击时执行Com