Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Контекстное меню 
:(
    Опции темы
zhiday
Дата 17.1.2012, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.10.2011

Репутация: нет
Всего: нет



Даже и не знаю как толком сформулировать))
В общем необходимо написать контекстное меню с n-ным уровнем вложенности.

Делаю класс, представляющий айтим:

Код

public class MenuItem
    {
        public MenuItem()
        {
            Items = new List<MenuItem>();
        }

        public string Title { get; set; }
        public List<MenuItem> Items { get; set; }
        public ICommand Command { get; set; }
        public Image Image { get; set; }
    }


Где-то создаю коллекцию этих айтимов:

Код

public List<MenuItem> Menu
        {
            get
            {
                var avids = new List<int>();
                foreach (var command in Commands)
                {
                    var id = command.GroupID;
                    if (!avids.Contains(id))
                    {
                        avids.Add(id);
                    }
                }

                if (avids.Count == 0) return null;

                var mainMenu = new List<MenuItem>();

                foreach (var id in avids)
                {
                    var items = (from command in Commands
                                 where command.GroupID == id
                                 select new MenuItem
                                            {
                                                Title = command.Title, 
                                                Command = command, 
                                                Image = command.Image
                                            }).ToList();

                    var subMenu = new MenuItem
                                      {
                                          Items = items, 
                                          Command = items.First().Command, 
                                          Image = items.First().Image, 
                                          Title = items.First().Title
                                      };

                    mainMenu.Add(subMenu);
                }

                return mainMenu;
            }
        }


И устанавливаю ContextMenu.DataContext = Menu;

ContextMenu следующее:

Код

<ContextMenu x:Name="ContextMenu">
                    <ContextMenu.ItemContainerStyle>
                        <Style TargetType="{x:Type MenuItem}">
                            <Setter Property="MenuItem.Header" Value="{Binding Title}"/>
                            <Setter Property="MenuItem.ItemsSource" Value="{Binding Items}"/>
                            <Setter Property="MenuItem.Command" Value="{Binding Command}"/>
                            <Setter Property="CommandParameter" Value="{Binding Title}"/>
                        </Style>
                    </ContextMenu.ItemContainerStyle>
                </ContextMenu> 


То есть каждому Item'у независимо от уровня вложенности соответствует какая-то команда.
Но выполняются только команды Item'ов на самом вложенном уровне... Клик на Item'е верхнего уровня только раскрывает список детей. 
Что бы такого сделать чтобы клик по любому Item'у приводил к выполнению связанной с ним команды?
Вроде бы как хитрый какой-то Template надо написать... Но никак не пойму как)

Заранее спасибо за ответы)

PM MAIL   Вверх
zhiday
Дата 18.1.2012, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.10.2011

Репутация: нет
Всего: нет



В общем сделал меню из вложенных Popup'ов. Но всё равно не покидает мысль, что можно сделать проще с использованием ContextMenu.
Если кто-нибудь поделиться опытом -- буду очень благодарен =)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0727 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.