【问题标题】:Binding Menu ItemsSource to a recursive data structure将 Menu ItemsSource 绑定到递归数据结构
【发布时间】:2010-10-31 03:13:37
【问题描述】:

我有一个简单的数据结构(属性当然是依赖属性):

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>

我使用了 MenuItem 的自定义重载,因为 ItemTemplate 已经包含在 Menu 元素的 MenuItem 标记中,所以我不得不摆脱它:

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

但结果看起来全错了(请注意突出显示过大和子菜单箭头)

能否请您指出正确的方向以便我完成这项工作?

感谢您的帮助。

【问题讨论】:

    标签: c# wpf binding menu itemssource


    【解决方案1】:

    所以我终于想通了。答案是HierarchicalDataTemplate

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多