【问题标题】:Wpf Application cross (X) Button not working on single ClickWpf应用程序交叉(X)按钮在单击时不起作用
【发布时间】:2013-07-31 06:15:38
【问题描述】:

我有一个 WPF 应用程序,我面临的问题是我的应用程序没有在单次十字 (X) 按钮单击时关闭。 也许我知道原因-

最初发生的事情是我在加载窗口时将焦点设置为 MenuItem,所以当我首先单击 Cross(X) 按钮时,MenuItem 的焦点被移除,然后在第二次单击应用程序 Cross(x) 按钮时有效.

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    MenuItem1.Focus();               
}

但是当我没有在 MenuItem 上设置焦点时,Cross 按钮在单击时起作用。

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    // MenuItem1.Focus();                 
}

我想将焦点设置在 MenuItem 上并希望 Red Cross(X) 按钮在 singleClick 上执行..

他们有什么方法可以实现这种情况..???

【问题讨论】:

  • 某些东西必须获得焦点,无论焦点如何,您的关闭按钮都应该可以工作。你能验证一下,如果你不设置焦点,这不会发生吗?如果没有,您可以发布一个小的可编译示例吗?
  • 如果有帮助,请查看编辑后的版本

标签: c# wpf buttonclick


【解决方案1】:

我同意这种行为正在发生...MenuItem 与具有焦点的Button 不同。 @Samuel,FocusManager.IsFocusScope 在这里无效。当Menu 被聚焦时,它甚至会阻止窗口被移动或重新调整大小,更不用说点击它的任何Buttons。

我尝试实现其他事件,例如 MouseLeaveLostFocus(在窗口上),但都无法更改此焦点 MenuItem

我不知道 Farzi 为什么希望它自动聚焦,但我认为这是一个坏主意。也许 Farzi 想要的可以通过不同的方式实现?也许暂时给MenuItem.Background 着色?

【讨论】:

  • 是的,我已经设置了背景而不是设置焦点并且它正在工作..但我只是想知道为什么十字按钮不会在单击时执行它应该工作而不管焦点设置在其他控件上正如@nvoigt 所说
  • 这正是微软决定在Menu控件中实现Focus的方式。如果您添加一个Button 和一个调用Click 的处理程序MenuItem1.Focus();,您将看到这是正常行为。单击此Button 后,您将无法在第一次单击时移动或关闭窗口。
  • 是的..所以我想我只有一个选项来移除焦点并设置 menuItem 的背景,它会显示为好像它是有焦点的..
【解决方案2】:

您遇到了 FocusManager 提供的逻辑范围的问题。见http://msdn.microsoft.com/en-us/library/aa969768.aspx

以下是焦点范围的相关问题和解释:http://social.msdn.microsoft.com/Forums/vstudio/en-US/f5de6ffc-fa03-4f08-87e9-77bbad752033/a-focusscope-nightmare-bug-commands-are-disabled 您可以通过在菜单上将 FocusManager.IsFocusScope 设置为 false 来解决此问题,但是这会产生一些可用性问题,因为菜单在自己的逻辑范围内工作得更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 2014-02-10
    • 2012-10-26
    相关资源
    最近更新 更多