Как прикрепить MenuItem к родительскому MenuItem в логическом и визуальном деревьях?

Я создал несколько 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 только списком "Items"... Это не то же самое, что MenuItems автоматически являются дочерними элементами родительского элемента управления Menu.

У кого-нибудь есть идея, как сделать динамически созданные элементы MenuItem дочерними для родительского элемента в визуальном дереве?

1 ответ

Решение

Объекты, которые добавляются в коллекцию Items элемента ItemsControl (MenuItem является ItemsControl), добавляются как логические дочерние элементы этого ItemsControl. Я думаю, проблема в том, что вы предоставляете неявный стиль для MenuItem. Вы просто явно устанавливаете Стиль родителя, но это не повлияет на потомков. Вы можете установить ItemContainerStyle, и это будет влиять на прямых потомков (но не на их потомков) или, что еще лучше, просто поместить Стиль в Ресурсы MenuItem или одного из его предков (без установки ключа).

Другие вопросы по тегам