2009-06-01 41 views
4

私は、ObjectDataProviderとDataTemplateを使用して、メニューバー内にMenuItemを設定しています。 (WPF、C#/ XAML)以下のスニペットを参照してください。WPF MenuItemの子どもが表示されない

結果:上部のメニュー項目が表示されます。これをクリックすると、ラッピングメニュー項目(バインドされたヘッダーテキストを持つもの)が小さな矢印とともに表示され、子供の存在を示すが、矢印をクリックすると矢印は表示されません子供たちを見せて、彼らにアクセスすることはできません。

期待される結果:子供は見えて正しく動作します。

スニペット:メニュー項目コントロールの

<ObjectDataProvider x:Key="Brokers" ObjectInstance="{x:Static brokers:BrokerManager.Instance}" MethodName="GetBrokers" IsAsynchronous="True" /> 
     <DataTemplate x:Key="BrokerMenuItem" DataType="IBroker"> 
      <MenuItem Header="{Binding Path=Name}"> 
       <MenuItem Header="Connect" /> 
       <MenuItem Header="Disconnect" /> 
      </MenuItem> 
     </DataTemplate> 

<MenuItem Header="Brokers" ItemsSource="{Binding Source={StaticResource Brokers}}" ItemTemplate="{DynamicResource BrokerMenuItem}"/> 

答えて

0

1週間以上の検索を行った後、最終的に正しく動作させる方法を見つけました。 DataTemplatesはダイナミックメニューにはあまりにもうまく機能しません。これを行う適切な方法は、MenuItemのItemContainerStyleプロパティを使用することです。 (またはItemStyleContainerですか?)

スタイルを作成して、ヘッダーをオーバーライドし、必要なものを設定してください。私はそれらをItemsSourceに上書きして子供たちを含めました。ただし、ここでは注意してください。子供がスタイルを継承し、それぞれが同じ子を持ち、再帰的なメニューを生成するからです。子供のItemsSourceをオーバーライドし、それを空のx:Arrayなどに設定する必要があります。

そこには、ItemContainerStyleの使い方を説明するブログがいくつかあります。

0

ItemSourceプロパティがそのアイテムのCHILDESを与えるために使用され、そのDataTemplateをして<ContentPresenter />を使用するようにしてください。

1

arsenmrkt:DataTemplateを使用してMenuItemを作成すると、生成されたアイテムのいずれかに子を追加するように見えますが、まったく同じ問題があります。私はあなたの答えを理解していない、どのようにこの問題を回避するためにContentPresenterを使用する必要がありますか?

編集: 実際には、コレクションにコレクションをバインドしようとしているので、実際には問題はありませんでした。私はそれがHierarchicalDataTemplateを使用して動作するようになったと思う:

<Menu> 
    <MenuItem Header="{Binding Name}" ItemsSource="{Binding MenuOptions}"> 
     <MenuItem.ItemTemplate> 
      <HierarchicalDataTemplate ItemsSource="{Binding Categories}"> 
       <MenuItem Header="{Binding Name}"/> 
       <HierarchicalDataTemplate.ItemTemplate> 
        <DataTemplate> 
         <MenuItem Header="{Binding Name}"/> 
        </DataTemplate> 
       </HierarchicalDataTemplate.ItemTemplate> 
      </HierarchicalDataTemplate> 
     </MenuItem.ItemTemplate> 
    </MenuItem> 
</Menu> 

これはNicholasFに役立ちますか?

関連する問題