我创建了几个MenuItems(不在XAML中)所以我添加了父项:
( Parent_Menu as MenuItem ).Items.Add( Menu_Item );
然后我通过VisualTree列表(在循环中)应用我的样式。但这些样式不适用于新的MenuItems。这是我的风格应用代码:
else if ( Visual is MenuItem )
{
MenuItem menuItem = Visual as MenuItem;
menuItem.Style = D_Interface.Style_Menu;
}
父菜单项获得了样式,但没有新的子菜单项。 所以我只是用调试器检查了哪些项目通过可视化树链接到父项目,并且我在父项目中找不到新的子项目。我猜他们也没有在逻辑树中链接到父级。
我检查了新的子项在全局visual \ logical树中的位置,因为我从调试器中了解到它们没有链接到不在可视树中而不在逻辑树中的任何父项,甚至没有链接到Window本身
我的结论是,它们仅与“项目”列表相关,而是与父菜单项相关...这与MenuItems自动成为父菜单控件的子项不同。
是否有人知道如何将动态创建的MenuItems作为可视树中父项的子项?
答案 0 :(得分:1)
添加到ItemsControl的Items集合中的对象(MenuItem是ItemsControl)被添加为ItemsControl的逻辑子节点。我认为问题是你正在为MenuItem提供一个隐式Style。您只是显式设置父级的样式,但不会影响后代。您可以设置ItemContainerStyle,这将影响直接子项(但不会影响他们的子项)或更好,只需将Style放入MenuItem的资源或其祖先之一(不设置键)。