Кнопка Wpf Application cross (X) не работает при одиночном щелчке

У меня есть приложение WPF, и проблема, с которой я сталкиваюсь, заключается в том, что мое приложение не закрывается одним нажатием кнопки крест (X). Может быть, я знаю причину-

Первоначально происходит то, что я устанавливаю Focus на MenuItem при загрузке окна, поэтому, когда я нажимаю кнопку Cross (X), сначала фокус из MenuItem удаляется, а затем при втором нажатии кнопки приложения Cross (x) работает.

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

Но когда я не устанавливаю фокус на элемент меню, кнопка «Крест» работает одним щелчком мыши.

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

Я хочу установить фокус на MenuItem и хочу, чтобы кнопка Red Cross (X) выполнялась на singleClick.

Есть ли способ реализовать этот сценарий ..???


person Vishal    schedule 31.07.2013    source источник
comment
Что-то должно иметь фокус, ваша кнопка закрытия должна работать независимо от фокуса. Можете ли вы проверить, что этого не происходит, если вы не устанавливаете фокус? Если это не так, можете ли вы опубликовать небольшой компилируемый пример?   -  person nvoigt    schedule 31.07.2013
comment
см. отредактированную версию, если это поможет   -  person Vishal    schedule 31.07.2013


Ответы (2)


Я согласен с тем, что такое поведение происходит ... MenuItem не то же самое, что Button с фокусом. @ Самуэль, FocusManager.IsFocusScope здесь не действует. Когда Menu находится в фокусе, он даже останавливает перемещение или изменение размера окна, не говоря уже о щелчке любого из его Button.

Я попытался реализовать другие события, такие как MouseLeave и LostFocus (в окне), без возможности изменить это сфокусированное MenuItem.

Я не знаю, почему Фарзи хочет, чтобы он был автоматически сфокусирован, но я бы сказал, что это плохая идея. Может быть, то, что хочет Фарзи, может быть достигнуто другим способом? Может, вместо этого временно покрасить MenuItem.Background?

person Sheridan    schedule 31.07.2013
comment
Да, я установил фон вместо установки фокуса, и он работает ... Но я просто не хочу, почему кнопка перекрестия не выполняется одним щелчком мыши, она должна работать независимо от фокуса, установленного на другом элементе управления, как сказал @nvoigt - person Vishal; 31.07.2013
comment
Именно так Microsoft решила реализовать Focus в Menu элементах управления. Если вы добавите Button с обработчиком Click, который вызывает MenuItem1.Focus();, вы увидите, что это нормальное поведение. После нажатия на этот Button вы не сможете переместить или закрыть окно при первом нажатии. - person Sheridan; 31.07.2013
comment
Я.. так что, я думаю, у меня просто есть возможность удалить фокус и установить фон элемента меню, который будет отображаться так, как будто он сфокусирован. - person Vishal; 31.07.2013

У вас возникли проблемы с логической областью, предоставляемой FocusManager. См. http://msdn.microsoft.com/en-us/library/aa969768.aspx

Вот связанные проблемы с областями фокусировки и объяснение: кошмар-ошибка-команды-отключены" rel="nofollow">http://social.msdn.microsoft.com/Forums/vstudio/en-US/f5de6ffc-fa03-4f08-87e9-77bbad752033/a-focusscope- кошмар-баг-команды-отключены Вы можете обойти это, установив для FocusManager.IsFocusScope значение false в меню, однако это создаст некоторые проблемы с удобством использования, поскольку меню лучше работают с собственной логической областью.

person Samuel    schedule 31.07.2013