我已经创建了几个菜单项(不是在XAML中),所以我将它们添加到父项:
( Parent_Menu as MenuItem ).Items.Add( Menu_Item );
然后我通过VisualTree列表应用了我的样式(在循环中)。但是这些样式不适用于新的菜单项。下面是我的样式应用代码:
else if ( Visual is MenuItem )
{
MenuItem menuItem = Visual as MenuItem;
menuItem.Style = D_Interface.Style_Menu;
}
父菜单项获得样式,但没有新的子菜单项。所以我只是用调试器检查了哪些项目通过可视化树链接到父项目,我无法在父项目中找到新的子项目。我猜它们在逻辑树中也没有链接到父节点。
我检查了新的子项在全局视觉逻辑树中的位置,正如我从调试器中理解的那样,它们不链接到任何父节点,不在视觉树中,不在逻辑树中,甚至不链接到窗口本身。
我的结论是,它们只通过"Items"列表与父MenuItem相关…这与菜单项自动成为父菜单控件的子菜单控件是不一样的。
有没有人知道如何使动态创建的菜单项是父在可视化树的孩子?
添加到ItemsControl的Items集合中的对象(MenuItem是一个ItemsControl)被添加为该ItemsControl的逻辑子对象。我认为问题在于您为MenuItem提供了隐式样式。你只是显式地设置父类的样式,但这不会影响后代。您可以设置ItemContainerStyle,这将影响直接的子元素(但不影响它们的子元素),或者更好的方法是将样式放入MenuItem或其祖先之一的资源中(不设置键)。