0

我创建了几个 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;
}

父菜单项获得了样式,但没有新的子菜单项。所以我只是用调试器检查了哪些项目通过可视化树链接到父项目,我在父项目中找不到新的子项目。我猜它们在逻辑树中也没有链接到父级。

我检查了新子项在全局视觉\逻辑树中的位置,正如我从调试器中了解到的那样,它们没有链接到任何不在视觉树中的父项,也不在逻辑树中,甚至没有链接到窗口本身。

我的结论是,它们仅通过“项目”列表与父 MenuItem 相关……这与 MenuItems 自动成为父菜单控件的子项不同。

有人知道如何使动态创建的 MenuItems 成为可视树中父级的子级吗?

4

1 回答 1

1

添加到 ItemsControl(MenuItem 是 ItemsControl)的 Items 集合中的对象将作为该 ItemsControl 的逻辑子级添加。我认为问题在于您为 MenuItem 提供了隐式样式。您只是明确设置父级的样式,但这不会影响后代。您可以设置 ItemContainerStyle ,这将影响直接子项(但不影响他们的子项),或者最好将样式放入 MenuItem 或其祖先之一的资源中(无需设置键)。

于 2013-04-26T01:04:16.273 回答