2012-04-05 10 views
0

この質問をする前に、私はStackOverflowとGoogleを見ていましたが、大変役に立つとは思えませんでした。私は、コンパイルされたXamlファイルからMenuをロードし、Menuコントロールにアタッチする方法のガイドラインを探しています。私はWPFの初心者ですので、私に同行してください。私のページでWPFでは、リソースからメニューをどのように読み込むことができますか?

、私は次のXAMLを持っている:

<Menu ItemsSource="{Binding MainMenu}"> 
</Menu> 

マイビューモデルクラスは、現在、そのようになっています

public class MainWindowViewModel : ViewModelBase 
{ 
    public ItemCollection MainMenu { get; set; } 

    public MainWindowViewModel() 
    { 
     Menu m = (Menu)Application.LoadComponent(new Uri("/Assets/Menus/StartupShellMenu.xaml", UriKind.Relative)); 
     MainMenu = m.Items; 
    } 
} 

StartupShellMenu.xamlファイルはそうのようになります。

<Menu xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <MenuItem Header="_File"> 
     <MenuItem Header="_Open"> 
      <MenuItem.Icon> 
       <Image Height="16" Width="16" Source="/Assets/Icons/Open.png"/> 
      </MenuItem.Icon> 
     </MenuItem> 
     <Separator/> 
     <MenuItem Header="E_xit"/> 
    </MenuItem> 
</Menu> 

私が見ているのは、メニュー項目が表示されますが、マウスがメニューから外れるとすぐに(私はメニュー項目を表示する必要はありませんクリックすると)、メニューは消えます。また、通常のキーボード機能は動作しません。 Alt + Fを押すとメニューは表示されず、一度表示されると上/下キーは機能しません。 MainMenuプロパティの型をObservableCollectionに変更しようとしましたが、変更はありませんでした。何かご意見は?私は何か愚かなことを明らかにしていないと確信していますが、私は検索に役立つものは何も見つかりません。

ありがとうございます!

答えて

0

これは100%のように感じ、ViewModelは関与していない可能性があります。

なぜこれでViewModelを使用していますか?実行時にメニューが変更されるのを実際に許可しているので、それは動的なメニューですか?

もしそうでなければ、StartupShellMenu.xamlファイルのクラスにクラス名を与えてからロードします。

<Menu x:Class="StartupShellMenu" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <MenuItem Header="_File"> 
     <MenuItem Header="_Open"> 
      <MenuItem.Icon> 
       <Image Height="16" Width="16" Source="/Assets/Icons/Open.png"/> 
      </MenuItem.Icon> 
     </MenuItem> 
     <Separator/> 
     <MenuItem Header="E_xit"/> 
    </MenuItem> 
</Menu> 

次に、必要がないのでViewModelから引き出します。

XAMLにメニューを置き、MainMenuにバインドする代わりに、新しいStartupShellMenuクラスをXAMLに直接追加するだけです。

<local:StartupShellMenu ItemsSource="{Binding MainMenu}" /> 

メニューは唯一のビューに存在する場合、ビュー内のすべてのメニューコードに100%を維持します。

+1

実際、私はそれを得たと思う。しかし、応答のためにトンをありがとう。はい、私の計画は、Visual Studioのメニューのように、コンテキストに応じて動的にメニューを表示することでした。メニュー項目をあるメニューから別のメニューに直接読み込むことはできないということが分かりました。これは本質的に私がやっていたことです。あなたがそれについて考えるなら、オーナーシップが疑問視されているので意味があります。私はHierarchicalDataTemplateオブジェクトとContentPresenterを使う必要がありました。再度、ありがとうございます。 私はあなたが応答するために取った時間のためにあなたに信用を与えるでしょう。それは感謝しています。 –

関連する問題