5

ObjectDataProviderとDataTemplateを使用して、メニューバー内にMenuItemを設定しています。(WPF、C#/ XAML)以下のsnipetを参照してください。

結果:一番上のメニュー項目が表示されます。クリックすると、折り返しメニュー項目(ヘッダーテキストがバインドされているもの)が子の存在を示す小さな矢印とともに表示されますが、矢印にカーソルを合わせたりクリックしたりしても子は表示されません。アクセスできません。

期待される結果:子は表示され、適切に動作します。

スニペット:

<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}"/>
4

3 に答える 3

1

1週間以上検索した後、ようやくこれを適切に機能させる方法を見つけました。DataTemplates は、動的メニューにはあまり適していないことがわかりました。これを行う適切な方法は、MenuItem の ItemContainerStyle プロパティを使用することです。(それとも ItemStyleContainer ですか?)

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

ItemContainerStyle の使用方法を説明しているブログがいくつかあります。それらをチェックしてください。

于 2009-06-21T16:45:52.760 に答える
0

menuitemコントロールのItemSourceプロパティは、そのアイテムの子を与えるために使用されます。そのデータテンプレートで使用<ContentPresenter />してみてください。

于 2009-06-01T03:16:09.583 に答える