私はWPFとMVVMの両方が初めてです。MVVMパートターンでメニューを動的に作成する良い方法を探しましたが、自分の好みに合うものが見つからないので、独自のソリューションを展開しました。動作しますが、何らかの理由で、メニューの前景色 (テキスト) の色が正しくないことがあります。
下の画像のリンクを追加しました。
http://img220.imageshack.us/img220/1912/badmenu.jpg (リンク切れ)
一番下のサブメニューは前景が白で正しく表示されますが、その親メニューの前景は黒に変わり、ほとんど読むことができません。メニューをハードコーディングした場合、親の前景色は白になります。親の上にマウスを移動すると、そのテキストは白に戻り、サブメニューは黒になります。
さらに、マウスを親から遠ざけると、そのブール値のプロパティはすべてIsHighlighted, IsSubmenuOpen, etc...
false になります。これは、true のままであるべきだと思うので驚くべきことです。最終結果は、スタイル トリガーでこれを解決できなかったということです。
これが私の 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 (リンク切れ)
私が間違っていること、および/または表示の問題を修正する方法について何か提案はありますか?