Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Just1ucky
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 16
1

Как объединить несколько ContextMenu?

18.07.2019, 19:17. Просмотров 894. Ответов 2
Метки нет (Все метки)

Приветствую!

Есть окно, у окна ContextMenu. В окне есть кнопка, у которой тоже ContextMenu. При вызове ContextMenu у кнопки должно вывестись MenuItem'ы как окна, так и кнопки. Один раз выводится, а при повторном нажатии пропадает один из MenuItem'ов.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<Window.DataContext>
        <local:MainMenuViewModel></local:MainMenuViewModel>
    </Window.DataContext>
 
    <Window.Resources>
        <x:Array Type="{x:Type MenuItem}" x:Key="windowContextMenu">
            <MenuItem Header="Main Context" Command="{Binding TestCommand}"></MenuItem>
        </x:Array>
    </Window.Resources>
 
    <Window.ContextMenu>
        <ContextMenu ItemsSource="{StaticResource ResourceKey=windowContextMenu}"></ContextMenu>
    </Window.ContextMenu>
 
    <Button Content="Button" Width="120" Height="30">
        <Button.ContextMenu>
            <ContextMenu>
                <ContextMenu.ItemsSource>
                    <CompositeCollection>
                        <CollectionContainer Collection="{StaticResource ResourceKey=windowContextMenu}"/>
                        <Separator/>
                        <MenuItem Header="Button Context" Command="{Binding TestCommand}"/>
                    </CompositeCollection>
                </ContextMenu.ItemsSource>
            </ContextMenu>
        </Button.ContextMenu>
    </Button>
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2019, 19:17
Ответы с готовыми решениями:

Как объединить несколько полигонов и создать из них один объект
Как объединить несколько полигонов(например острова), создать из них один объект, а потом добавить...

[SL] ContextMenu. Как уничтожить?
После вызова меню память увеличивается Как удалить контекстное меню? &lt;Grid...

Объединить несколько Uri в один
Есть два Uri: например http://www.cyberforum.ru/csharp-net/thread2109579.html и ../ Я ожидаю, что...

Объединить несколько Expression<Func<T, bool>>
Добрый вечер форумчане. Подскажите пожалуйста, как имея два выражения, например ...

Как сделать свое ContextMenu как у Steam
Здравствуйте, я пишу приложение на WPF, которое должно вывести собственный прицел по центру...

2
proa33
315 / 113 / 61
Регистрация: 05.12.2015
Сообщений: 230
18.07.2019, 20:28 2
Лучший ответ Сообщение было отмечено Just1ucky как решение

Решение

Цитата Сообщение от Just1ucky Посмотреть сообщение
при повторном нажатии пропадает один из MenuItem'ов.
MenuItem не может одновременно принадлежать разным Menu.
Поэтому он остается у первого.
Для твоей задачи нужно создавать РАЗНЫЕ экземпляры MenuItem

Приблизительно шаблон такой
XML
1
2
3
4
5
6
7
8
9
10
11
   <Window.Resources>
 
      <MenuItem x:Key="win1Key" Header="win1" x:Shared="False"/>
      <MenuItem x:Key="win2Key" Header="win2" x:Shared="False"/>
 
      <x:Array x:Key="winmenu" Type="{x:Type MenuItem}" x:Shared="False">
         <StaticResource ResourceKey="win1Key"/>
         <StaticResource ResourceKey="win2Key"/>
      </x:Array>
 
   </Window.Resources>
1
novikov.ea
1339 / 950 / 339
Регистрация: 10.06.2011
Сообщений: 1,698
18.07.2019, 21:50 3
Как-то мне нужно было реализовать подобную логику контекстного меню. У элементов разного уровня были свои MenuItem'ы, которые должны быть отображены у всех потомков. Решил я это так:
1) Создал AttachedProperty типа List<MenuItemViewModel>
2) Задал каждому элементу, имеющими свои MenuItem это AttachedProperty с коллекцией MenuItemViewModel
3) Создал Behavior, который при загрузке элемента проходил по визуальному дереву наверх, просматривал значения этого AttachedProperty, собирал все MenuItemViewModel.
4) Menu - это ItemsControl. А значит, ему можно задать ItemsSource. Этим ItemsSource как раз и становилась собранная коллекция из MenuItemViewModel.
1
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2019, 21:50

Как задать различное ContextMenu в зависимости от выбора строки DataGrid?
Простой пример &lt;DataGrid AutoGenerateColumns=&quot;False&quot; Height=&quot;200&quot; HorizontalAlignment=&quot;Left&quot;...

Как объединить несколько запросов?
есть несколько запросов вида: SELECT SUM(summa), COUNT(1) FROM kassa where id_kassa=1 ...

Как объединить несколько коллекций?
Делаю для тренировке игру. у меня есть несколько классов под каждый класс есть свой лист в котором...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru