Я новичок в WPF и MVVM. Я искал хороший способ динамически создавать меню в программе MVVM, и я не нашел ничего по своему вкусу, поэтому я нашел собственное решение. Это работает, но по какой-то причине цвет переднего плана (текста) меню иногда (просто иногда) не корректен.
Я добавил ссылку на изображение ниже.
http://img220.imageshack.us/img220/1912/badmenu.jpg (Dead Link)
Мое нижнее подменю отображается правильно с белым передним планом, но его родительское меню переднего плана стало черным и почти невозможно прочитать. Если бы я жестко закодировал меню, то цвет переднего плана родителя был бы белым. Если я наведу курсор мыши на родителя, его текст снова станет белым, а подменю станет черным.
Далее, когда я убираю свою мышь от родителя, все ее логические свойства IsHighlighted, IsSubmenuOpen, etc...
становятся ложными, что удивляет меня, потому что я думаю, что они должны оставаться верными. В результате я не смог решить эту проблему с помощью триггера стиля.
Вот мой XAML.
<Window.Resources>
<DataTemplate DataType="{x:Type src:ParentMenu}" >
<Menu >
<MenuItem Header="{Binding MenuName}" ItemsSource="{Binding ChildMenuItems}" />
</Menu>
</DataTemplate>
<HierarchicalDataTemplate DataType="{x:Type src:ChildMenu}"
ItemsSource="{Binding ChildMenuItems}" >
<MenuItem Header="{Binding MenuName}" Command="{Binding Path=Command}" />
</HierarchicalDataTemplate>
'StackOverflow маскирует мой конечный тег для Window.Resources
<DockPanel>
<Menu DockPanel.Dock="Top" ItemsSource="{Binding Menus}" />
<Grid>
<!-- Add additional content here -->
</Grid>
</DockPanel>
И ParentMenu
, и ChildMenu
наследуются от общего класса, который фактически содержит все меню и предоставляет подменю через коллекцию ChildMenuItems
. ChildMenuItems
- это список ChildMenu
объектов. Мой ViewModels
выставляет список ParentMenu
объектов.
Возможно, есть лучшие способы выполнить то, что я хочу здесь. Вот пример:
img132.imageshack.us / img132 / 4160 / bettermenu.jpg (Мертвая ссылка)
Есть предложения, что я делаю неправильно и / или как исправить проблему с дисплеем?