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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WPF динамическая работа с меню 
V
    Опции темы
U237
Дата 25.11.2008, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как правильно дополнять динамически меню на C#?
скажем есть такой код в xaml

Код

<Menu Height="22" Name="menu1" VerticalAlignment="Top" />


В коде:

Код

menu1.Items.Add("_File");
menu1.Items.Add("_Edit");


Это работает, а как создать подменю? 
Как обращаться к новым пунктам? 
Как повесить обработчик на созданный пункт меню? 

PM MAIL   Вверх
Idsa
Дата 25.11.2008, 06:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

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



U237, не проверял, но думаю, что метод Add возвращает ссылку на объект нового элемента меню. А если у Вас есть ссылка на объект, то все вышеперечисленные действия
Цитата(U237 @  25.11.2008,  05:44 Найти цитируемый пост)
как создать подменю? 
Как обращаться к новым пунктам? 
Как повесить обработчик на созданный пункт меню? 

становятся тривиальными.

Это сообщение отредактировал(а) Idsa - 25.11.2008, 06:27


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
U237
Дата 25.11.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Метод Add возвращает значение типа int. Судя по всему это номер элемента в массиве. Но получить доступ к этому элементу у меня не получается, код компилируется, а при выполнении происходит исключение.
Код

MenuItem temp = (MenuItem)menu1.Items[0];

Странно и то что изменили конструктор теперь он не принимает ни одного параметра.
Код

MenuItem myMenu = new MenuItem();

PM MAIL   Вверх
Partizan
Дата 25.11.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



Цитата

Странно и то что изменили конструктор теперь он не принимает ни одного параметра.


Это сделано для того, чтобы в дизайнере всё нормально отображалось.


MenuItem myMenu = new MenuItem();


U237, какое исключение кидается?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
rooks
Дата 25.11.2008, 19:47 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
Это работает, а как создать подменю? 
Как обращаться к новым пунктам? 
Как повесить обработчик на созданный пункт меню?

Лучше явно создавать объекты, которые нужно добавлять в меню, тогда потом проще кодить будет. Вот так, например:
Код
    menu1.Items.Add(new MenuItem() { Name = "_File" });
    menu1.Items.Add(new MenuItem() { Name = "_Edit" });

Кстати из примера, думаю, понятно зачем убрали параметры у конструкторов smile. Если хочется почитать по-подробнее гуглим на тему object initializers. Так как MenuItem это ItemsControl, то добавлять подменю можно аналогично предыдущему примеру:
Код
    ((MenuItem)menu1.Items[0]).Items.Add(new MenuItem() { Name = "subItem1" });
    ((MenuItem)menu1.Items[0]).Items.Add(new MenuItem() { Name = "subItem2" });



Это сообщение отредактировал(а) rooks - 25.11.2008, 20:11
PM MAIL ICQ   Вверх
U237
Дата 26.11.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код и идея понятен и вроде работает но названия самого меню не отображается не в основном меню не в подменю.
PM MAIL   Вверх
U237
Дата 26.11.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все разобрался всем спасибо!
Поле называется по другому.
Код

menu1.Items.Add(new MenuItem() { Head = "_File" });

Хотя все равно есть странности этот код работает.
Код

MenuItem myExit = new MenuItem();
myExit.Header = "_test3";
myExit.Click += myClic;
menu1.Items.Add(myExit);


а вот этот код
Код

menu1.Items.Add(new MenuItem() { Head = "_File",  Click += myClic;});

Утверждает что поля Click не существует.
PM MAIL   Вверх
rooks
Дата 26.11.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



C помощью object initializers можно устанавливать значения полей и свойств, а Click - это событие, так что придется использовать первый вариант. Или такой:
Код
    MenuItem myExit = new MenuItem { Header = "_test3" };
    myExit.Click += myClic;
    menu1.Items.Add(myExit);

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


 




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


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

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