0

私は単純なデータ構造を持っています (プロパティはもちろん依存関係プロパティです):

class MenuData{
    public string Header {get; protected set;}
    public ObservableCollection<MenuData> Items { get; protected set; }
}

ObservableCollection<MenuData> Menus {get; protected set;}

Menus プロパティを Menu 要素 ItemsSource としてバインドしたいと考えています。結果は、標準の Windows メニュー バーのようになります。アイテムの最初のレベルは水平に並べられ、サブアイテムはサブメニューで非表示になります。

XAML を試して、最初のレベル (水平メニュー バー) を作成しました。

<my:MenuElement ItemsSource="{Binding Menus}">
    <my:MenuElement.ItemTemplate>
        <DataTemplate>                
            <MenuItem Header="{Binding Header}">                    
                <!-- Try to add some sub-menus to see what it is going to look like. -->
                <MenuItem Header="A" />
                <MenuItem Header="A" />
                <MenuItem Header="A" />
                <MenuItem Header="A" />
            </MenuItem>
        </DataTemplate>
    </my:MenuElement.ItemTemplate>
</my:MenuElement>

ItemTemplate は既に Menu 要素の MenuItem タグにラップされているため、MenuItem のカスタム オーバーロードを使用したため、それを取り除く必要がありました。

class MenuElement: System.Windows.Controls.Menu 
{
    protected override DependencyObject GetContainerForItemOverride()
    {
        return new System.Windows.Controls.ContentPresenter();
    }
}

しかし、結果はすべて間違っているように見えます (ハイライトが大きすぎて、サブメニューの矢印に注意してください)。

代替テキスト

私がこれを機能させることができるように、私を正しい方向に向けてください。

助けてくれてありがとう。

4

1 に答える 1

0

それで私はついにそれを理解しました。答えはHierarchicalDataTemplateです。

于 2010-10-30T19:13:37.523 に答える