簡體   English   中英

動態生成的子菜單項出現在 WPF 屏幕的左上角

[英]Dynamically generated sub-menu items appearing in the top left corner of the screen in WPF

我正在嘗試使用ItemTemplate基於枚舉創建菜單項列表。 問題是,當我使用項目模板時,子菜單出現在屏幕的左上角(見圖 1),而不是在子菜單 header 旁邊,就像在 XAML 中定義的項目一樣(見圖2)。

從枚舉生成的項目:

在此處輸入圖像描述

XAML 中定義的項目:

在此處輸入圖像描述

我希望從資源中獲取項目,但仍像在第二個示例中那樣出現在菜單流中。

以下是相關代碼:

<Menu>
    <MenuItem Header="🝖 Advanced Filters">
        <MenuItem Header="Status"
                  ItemsSource="{Binding Source={StaticResource Statuses}}">
            <MenuItem.ItemTemplate>
                <DataTemplate>
                    <MenuItem Header="{Binding Converter={StaticResource EnumCaseConverter}}" />
                </DataTemplate>
            </MenuItem.ItemTemplate>
        </MenuItem>
        <MenuItem Header="Submenu 2">
            <MenuItem Header="Item 1" />
            <MenuItem Header="Item 2" />
        </MenuItem>
    </MenuItem>
</Menu>

如果相關,我的項目包括Material Design

材料設計菜單示例

我的解決方案是以編程方式而不是在 XAML 中進行。

如果有人有一個完全在 XAML 中的簡單修復,我很樂意看到解決方案是什么。

private void PopulateFilterMenu()
{
    // Create sub-menus
    MenuItem status = AddMenuItem(FilterMenu, "Status", false);
    MenuItem type = AddMenuItem(FilterMenu, "Type", false);

    // Add status items
    foreach (string item in Enum.GetNames(typeof(Statuses)))
        AddMenuItem(status, item, true);

    // Add type items
    foreach (string item in Enum.GetNames(typeof(Type)))
        AddMenuItem(type, item, true);
}

private MenuItem AddMenuItem(MenuItem parent, string header, bool checkable = false)
{
    if (parent == null) { return parent; }
    MenuItem menuItem = new MenuItem
    {
        Header = EnumCaseConverter.Convert(header),
        IsCheckable = checkable,
        IsChecked = checkable
    };
    parent.Items.Add(menuItem);
    return menuItem;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM