WPFのMenuItemの子供たちが表示されません
-
06-09-2019 - |
質問
私は私のメニューバー内のMenuItemを移入したObjectDataProviderとするDataTemplateを使用しています。 (WPF、C#/ XAML)snipet以下を参照してください。
結果:私はそれをクリックしたときに一番上のメニュー項目が表示され、ラッピングメニュー項目(バインドヘッダーテキストを持つ1)は、子どもの存在を示すが、ホバリングや表示されません矢印をクリックすると小さな矢印と一緒に表示されます子供たちは、彼らがアクセスすることはできません。
期待される結果:子供が表示され、正常に動作します。
。スニペットます:
<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}"/>
解決 2
週間以上にわたって検索した後、私は最終的に適切にこの作品を作る方法を発見しました。それはDataTemplatesが動的メニューには大きすぎる動作しませんが判明しました。これを行うための適切な方法は、MenuItemののItemContainerStyleプロパティを使用することです。
(またはそのItemStyleContainer?です)単にヘッダを上書きし、何が必要にそれを設定するためのスタイルを作成します。私彼らは私の子供を含めることのItemsSourceをオーバーライド。子どもたちは、スタイルを継承し、それぞれ同じ子を持つと再帰的なメニューを生成します。しかし、ここで注意してください。あなたはあなたの子供ののItemsSourceをオーバーライドして、空のxに設定する必要があります。配列または同類
それらをチェックアウト、ItemContainerStyleを使用する方法を説明そこにいくつかのブログがあります。
他のヒント
arsenmrkt:私はDataTemplateのを使用してのMenuItemを取り込む場合、私は正確に同じ問題を抱えている、私はそれらの生成された項目のいずれかに子を追加するように見える傾けます。私もあなたの答えを理解していない、私はこの問題を回避するためのContentPresenterを使うべきか?
編集: 実は、私の問題は、私はメニューにコレクションのコレクションをバインドしようとしているため、まったく同じwas'nt。私はそれが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していますか?
ItemSource、それのDataTemplateで<ContentPresenter />
を使用するようにしてくださいます。