gpt4 book ai didi

wpf - 如何判断默认文本框上下文菜单何时打开或关闭?

转载 作者:行者123 更新时间:2023-12-04 11:59:50 25 4
gpt4 key购买 nike

如何判断默认文本框上下文菜单何时打开(打开之前)或关闭后(不是之前、之后)?当我使用标准的内置菜单时,ContextMenuOpening 和 ContextMenuClosing 事件似乎不会触发。我猜我可以简单地重新创建菜单并用标准命令填充它,但这似乎有点矫枉过正。

这样做的具体原因是我有一个模板化控件,它在“编辑”模式下交换了一个文本框。当文本框失去焦点时,该控件会自动退出编辑模式。问题是当上下文菜单弹出时,文本框失去焦点,从而退出编辑模式,上下文菜单立即消失。

我想要做的是在上下文菜单打开之前,设置一个标志来短路文本框上的 LostFocus 事件代码。然后在上下文菜单关闭后,我需要清除该标志,但我还需要检测现在具有焦点的控件是否仍然是文本框,如果不是,则处理代码,就好像它确实失去了焦点一样。 (或者,如果我知道哪个控件在关闭后将获得焦点,我可以在它关闭之前测试它。它会达到相同的效果。)

如果有人显示上下文菜单(因此文本框在技术上不再具有焦点)但随后单击 UI 中的其他位置以关闭上下文菜单,则需要处理特定情况,因为我需要检测该文本框实际上已经失去焦点,因此控件应该退出编辑模式。但是如果用户通过在文本框中返回来关闭上下文菜单,那么我不希望 LostFocus 事件被触发。

有道理?



更新:从技术上讲,这个问题没有得到回答,尽管我将其标记为这样,因为响应者确实帮助我解决了我的问题。但至于这里的实际问题,答案似乎是“你不能”。

好消息是因为默认的文本框上下文菜单只有三个标准项目,通过将其添加到某处的资源中很容易复制...

<ContextMenu x:Key="DefaultTextBoxContextMenu">
<MenuItem Command="ApplicationCommands.Cut" />
<MenuItem Command="ApplicationCommands.Copy" />
<MenuItem Command="ApplicationCommands.Paste" />
</ContextMenu>

......并像这样附加它......
<TextBox x:Name="EditTextBox"
ContextMenu="{StaticResource DefaultTextBoxContextMenu}"
ContextMenuOpening="EditTextBox_ContextMenuOpening"
ContextMenuClosing="EditTextBox_ContextMenuClosing" />

...那么您的事件会如您所愿。如果你问我仍然很奇怪,但无论如何都是一个微不足道的解决方法,所以我不会提示。

最佳答案

当文本框的上下文菜单打开时,文本框失去键盘焦点,但保留逻辑焦点。换句话说,它的 LostKeyboardFocus 事件会触发,但它的 LostFocus 事件不会。当上下文菜单打开时,文本框的 IsFocused 属性保持为真。根据您对问题的描述,您应该能够依靠逻辑焦点来确定何时结束控件中的“编辑模式”。

关于wpf - 如何判断默认文本框上下文菜单何时打开或关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5672454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com