Как прикрепить 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 или одного из его предков (без установки ключа).