![](/img/trans.png)
[英]WPF When Binding to ContextMenu.IsOpen Context Menu flashes in top left corner of screen on first invocation
[英]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.