Я пытаюсь создать несколько сложный элемент меню, который позволит пользователю создать новый класс. Проблема, в которой я запускаю, заключается в том, что когда я нажимаю на числовое вверх (из инструментария xceed), что элемент меню закрывается, даже если свойство StaysOpenOnClick
установлено в true.Как я могу открыть элемент подменю меню?
Пользователям это не понравится.
Чтобы воспроизвести, создать проект WPF и добавить Extended WPF Toolkit через NuGet, то падение следующий код в свой класс MainWindow:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WhyDoesMyMenuItemCloseWhenClicked"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
mc:Ignorable="d"
x:Class="WhyDoesMyMenuItemCloseWhenClicked.MainWindow"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="21"/>
<RowDefinition />
</Grid.RowDefinitions>
<Menu FontWeight="Bold">
<MenuItem Header="_File">
<MenuItem StaysOpenOnClick="True">
<Grid Height="50" Width="50">
<xctk:IntegerUpDown/>
</Grid>
</MenuItem>
</MenuItem>
</Menu>
</Grid>
</Window>
Когда я нажимаю текстовое поле целого числа вверх-вниз, меню закрывается.
Почему это происходит? Как я могу сделать это НЕ случилось?
При вводе в текстовое поле, там больше происходит, чем просто щелчком мыши. Элемент, отличный от меню, получает полный захват/фокус клавиатуры, что, вероятно, вызывает совершенно другую цепочку событий. Вы можете попробовать перехватить изменения в IsSubMenuOpen и отменить или изменить их, но мои попытки привели к неприемлемому поведению. Хотя это и было, на самом деле, оставаться открытым. – Daniel
Что-то еще, вы можете попробовать извлечь шаблон MenuItem для ресурса и заменить его (в popup) на переменную, которую вы контролируете: IsOpen = "{Binding IsSubmenuOpen, RelativeSource = {RelativeSource TemplatedParent}}" – Daniel
Да, даже заставляя все дерево меню оставаться открытым все же приводит к неприемлемому поведению. Некоторая часть меню сильно отрывает фокус от текстового поля. Это немного больше, чем я готов расследовать в воскресенье, но я желаю вам удачи. Я надеюсь, что это помогло вам в чем-то. – Daniel