Сосредоточьтесь MenuItem в подменю WPF
Я пишу приложение с меню, содержащим подменю. Также у меня есть StatusBar, где я хочу отображать информацию о сфокусированном MenuItem, когда пользователь перемещается по меню с помощью клавиатуры. Я пытался обработать событие GotFocus из каждого MenuItem и изменить содержимое StatusBar на тег отправителя, но он работает только с MenuItem 1, а не с 1.1 и 2.2.
XAML:
<Menu Height="23" x:Name="mainMenu">
<MenuItem Header="Header1" Tag="Info1" GotFocus="MenuItem_GotFocus_1">
<MenuItem Header="Header1.1" Tag="Info1.1" GotFocus="MenuItem_GotFocus_1"/>
<MenuItem Header="Header1.2" Tag="Info1.1" GotFocus="MenuItem_GotFocus_1"/>
...
</MenuItem>
...
</Menu>
C#:
private void MenuItem_GotFocus_1(object sender, RoutedEventArgs e)
{
statusBarItem.Content = (sender as FrameworkElement).Tag;
}
Как я могу отобразить информацию о предметах, выделенных подменю? Может быть, есть другие способы сделать это?
Спасибо, Александр.
1 ответ
Не уверен, что это относится именно к тому, что вам нужно, но я думаю, что это то, что вам нужно...
Всегда лучше привязать к view-модели - и тогда вы можете выставить этот "статус" в другом месте, просто привязавшись к нему...
В случае IsFocused
(Если вы говорите о стандартных пунктах меню WPF), существует небольшая проблема с привязкой к нему, так как это только для чтения, поэтому привязка завершается с чем-то вроде
http://meleak.wordpress.com/2011/08/28/onewaytosource-binding-for-readonly-dependency-property/
(это также хороший пример этого решения, похожего только на ActiveWidth/Height)
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="pb:PushBindingManager.StylePushBindings">
<Setter.Value>
<pb:PushBindingCollection>
<pb:PushBinding TargetProperty="IsFocused" Path="IsFocused"/>
</pb:PushBindingCollection>
</Setter.Value>
</Setter>
Вы можете скачать проект / lib для поддержки по ссылке в статье выше (PushBindingManager
) Поставить что-то вроде xmlns:pb="clr-namespace:PushBindingExtension;assembly=some-assembly"
(Я скопировал, интегрировал, поэтому у меня нет точного источника / имени здесь).
И вы должны быть готовы к работе. Просто сделай IsFocused
в вашей модели представления свяжите меню с ним - и затем поднимите этот любой пункт is focused
на статус. Здесь требуется некоторая "работа ногами", но она довольно минимальна.
Надеюсь это поможет
ПРИМЕЧАНИЕ. Используйте другую ссылку для загрузки (например, http://dl.dropbox.com/u/39657172/Blog/PushBindingInStyleDemo.zip).
(этот содержит StylePushBindings
который вам нужен, для стилей.