wpf создание меню в коде

Как создать меню в WPF, которое имеет стиль веб-приложения Microsoft

нам было поручено разработать корпоративное приложение в WPF, которое заменит приложение WinForms серого цвета линкора современным внешним видом.

нам нравится внешний вид и ощущение, что веб-приложения Microsoft в настоящее время обладают:

wpf создание меню в коде. 3ea799e2b6d81cfe4b5bcc7e0be468df. wpf создание меню в коде фото. wpf создание меню в коде-3ea799e2b6d81cfe4b5bcc7e0be468df. картинка wpf создание меню в коде. картинка 3ea799e2b6d81cfe4b5bcc7e0be468df. нам было поручено разработать корпоративное приложение в WPF, которое заменит приложение WinForms серого цвета линкора современным внешним видом.

мы могли бы создать эти меню в WPF обычным способом:

но мы получим что-то, что выглядит как меню Winforms.

Я видел некоторые довольно впечатляющие усилия по стилизации, как этот, но все они, похоже, имеют одинаковую знакомую форму Winforms. Я также видел меню в библиотеках, таких как Mahapps Metro, но они кажутся нам слишком спартанскими.

является ли элемент управления меню WPF достаточно гибким, чтобы быть стилизованным, как показано на рисунке выше, или мы должны пойти другим путем, как создание пользовательского элемента управления меню из панелей стека и списков? Каковы компромиссы?

бонусные баллы (т. е. баунти) будут начислены за xaml / код, который делает именно это.

пример этого стиля меню в действии:
https://www.visualstudio.com/

5 ответов

WPF был действительно разработан с возможностью изменения внешнего вида и поведения всех готовых механизмов / элементов управления (кнопки, меню, treeview и т. д.). Так что, в общем, лучше это сделать, чем все переписывать. Например, если вы перепроектируете свое пользовательское меню, вам придется подумать о клавиатуре, автоматизации пользовательского интерфейса и т. д.

вот результат и, как вы видите, он выглядит очень похожим:

wpf создание меню в коде. 1e7f3361fc1e0ca619db4105e07ee1a7. wpf создание меню в коде фото. wpf создание меню в коде-1e7f3361fc1e0ca619db4105e07ee1a7. картинка wpf создание меню в коде. картинка 1e7f3361fc1e0ca619db4105e07ee1a7. нам было поручено разработать корпоративное приложение в WPF, которое заменит приложение WinForms серого цвета линкора современным внешним видом.

вот XAML. Я решил использовать шаблон пользовательского элемента управления для каждого MenuItem. Я думаю, что это довольно практично, когда вам нужно действительно настроить каждый элемент.

вы, вероятно, ищете какую-то тему Wpf для начала.

тогда вы, вероятно, захотите настроить его еще больше с помощью внешний вид вы ищете.

Источник

Создание мею и панели инструментов[wpf]

Нужно сделать следующее задание по созданию меню и панели инструментов:
1. Создать приложение, как показано на рис. 1. Пункт меню File имеет три команды: Message, Check, Exit. Пункт меню Help включает одну команду About. Выбор команды Message приведет к открытию окна сообщения. Выбор команды Exit приведет к закрытию приложения. Выбор команды Check приведет к снятию флажка у этой команды и сделает команду Message недоступной. Повторный выбор команды Check приведет к обратным действиям. Выбор команды About приведет к выводу окна About вашего приложения.
2. Создать необходимые пункты меню со списком команд, клавишами быстрого вызова.
3. Создать панель инструментов (ToolBar), которая дублирует пункты меню File.
4. Для нескольких основных функций разработайте значки и создайте их с помощью одного из известных Вам графических редакторов, например, MS Paint. При разработке эскизов используйте хорошо известные большинству потенциальных пользователей целевой аудитории аналогии и афорданс.
5. Создать контекстное меню, которое повторяет меню File.
6. Задайте возможность завершения работы приложения при нажатии на клавишу X.
7. Добавьте в меню пункт Edit между пунктами File и Help. Задайте так, чтобы при нажатии на клавишу D с пунктом меню Edit добавлялись команды Undo, Cut, Copy, Paste.

С wpf сам не знаком и в университете на лекциях по нему ничего не читают, также мало знаю С#. На лекциях дают теорию по дизайну меню, интерфейсов, но ничего касательно wpf. А на практических дают задания по wpf ничего не объясняя, а только дают присер программы. Пробовал сделать данное задание с помощью msdn, но с msdn особо не разобрался как с помощью msdn сделать данное задание. Преподаватель говорит то, что задания легкие и без его объяснения сможем сделать. Просьба подсказать, что можно почитать для того выполнения данного задания по wpf. За меня делать данное задание не нужно.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Панели инструментов
В 10 студии, когда начинаешь тащить любое окно(свойства, обозреватель решений, список ошибок).

Дополнение набора панели инструментов из внешних сборок
Привет, проблема такая. Visual Studio 2010. Подключаю внешнюю dll-сборку к новому WPF-проекту.

Создание панели инструментов
Привет! Помогите пожалуйста создать панель инструментов, чтоб после запуска программы можно было.

Источник

Общие сведения о контекстном меню

PopupЭлемент управления предоставляет способ отображения содержимого в отдельном окне, расположенном поверх текущего окна приложения относительно назначенного элемента или экранной координаты. В этом разделе описывается Popup элемент управления и предоставляются сведения об его использовании.

Что такое контекстное меню?

Создание всплывающего окна

Элементы управления, реализующие контекстное меню

PopupЭлементы управления можно создавать в других элементах управления. Следующие элементы управления реализуют Popup элемент управления для конкретных применений.

ToolTip. Если необходимо создать подсказку для элемента, используйте ToolTip ToolTipService классы и. Дополнительные сведения см. в разделе Общие сведения о всплывающих подсказках.

ContextMenu. Если необходимо создать контекстное меню для элемента, используйте ContextMenu элемент управления. Дополнительные сведения см. в разделе Общие сведения об элементе управления ContextMenu.

ComboBox. Если необходимо создать элемент управления выбора с раскрывающимся списком, который можно отобразить или скрыть, используйте ComboBox элемент управления.

Expander. Если необходимо создать элемент управления, отображающий заголовок с сворачиваемой областью отображения содержимого, используйте Expander элемент управления. Дополнительные сведения см. в разделе Общие сведения об элементе управления Expander.

Внешний вид и поведение контекстного меню

PopupЭлемент управления предоставляет функциональные возможности, позволяющие настраивать его поведение и внешний вид. Например, можно задать поведение открытия и закрытия, анимацию, эффекты непрозрачности и растровых эффектов, а также Popup размер и расположение.

Поведение открытия и закрытия

OpenedСобытия и Closed вызываются, когда Popup окно содержимого открыто или закрыто.

Анимация

Прозрачность и эффекты для точечных рисунков

Размер контекстного меню

По умолчанию Popup размер автоматически изменяется в соответствии с содержимым. При возникновении автоматического изменения размера некоторые эффекты растрового изображения могут быть скрыты, так как размер области экрана по умолчанию, определенный для Popup содержимого, не предоставляет достаточно места для отображения эффектов растрового изображения.

Определение положения контекстного меню

Настройка размещения всплывающего окна

Контекстное меню и визуальное дерево

Источник

Элементы меню

Все меню конструируются из объектов MenuItem и Separator. Класс MenuItem унаследован от HeaderedltemsControl, поскольку каждый элемент меню имеет заголовок (в котором содержится предназначенный для него текст) и может умещать в себе коллекцию объектов MenuItem (с помощью которой представляется подменю). Класс Separator просто отображает горизонтальную линию для разделения элементов меню.

Ниже приведена простая комбинация объектов MenuItem, которые создают элементарную структуру меню, показанную на рисунке:

wpf создание меню в коде. img80101. wpf создание меню в коде фото. wpf создание меню в коде-img80101. картинка wpf создание меню в коде. картинка img80101. нам было поручено разработать корпоративное приложение в WPF, которое заменит приложение WinForms серого цвета линкора современным внешним видом.

WPF позволяет нарушать многие из привычных правил структуризации меню. Например, внутри Menu или MenuItem допускается размещать объекты, отличные от MenuItem. Это дает возможность создавать меню, содержащие обычные элементы WPF, начиная от Checkbox и заканчивая DocumentViewer. По ряду причин размещение в меню объектов, отличных от MenuItem, практически всегда является плохой идеей, поскольку приводит к появлению нескольких необычных проблем, которые нужно отслеживать и исправлять. Например, элемент TextBox в MenuItem будет утрачивать фокус сразу же после перемещения мыши за пределы этого MenuItem.

Если же действительно необходимо создать пользовательский интерфейс, включающий нечто вроде раскрывающихся меню с элементами управления, лучше рассмотреть вариант использования другого элемента (например, Expander) и его стилизации в соответствии с имеющимися потребностями. Элементы управления Menu и MenuItems стоит применять только тогда, когда действительно требуется поведение, свойственное меню — другими словами, когда необходима группа активизируемых щелчком команд.

Если нужно, чтобы подменю после открытия оставались видимыми до тех пора, пока пользователь не щелкнет в каком-нибудь другом месте, установите свойство StaysOpenOnClick в true.

Объекты MenuItem можно также использовать и за пределами стандартных контейнеров Menu, ContextMenu и MenuItem. Они будут вести себя точно так же, как и обычные элементы меню, т.е. будут подсвечиваться голубым при наведении на них курсора мыши и позволять выполнять щелчок для инициации действий. Однако получить доступ к любым содержащимся в них подменю не получится. Опять-таки, это одна из тех возможностей Menu, которая вряд ли будет пользоваться популярностью среди разработчиков.

Для реагирования на щелчок на элементе MenuItem можно использовать событие MenuItem.Click. Можно обеспечить его обработку для отдельных элементов, а можно просто присоединить к корневому дескриптору Menu соответствующий обработчик таких событий. Другой вариант — с помощью свойств Command, CommandParameter и CommandTarget соединить MenuItem с объектом Command, как это делалось для кнопок.

Такой вариант особенно удобен, если пользовательский интерфейс включает несколько меню (например, главное меню и контекстное меню), в которых применяются одинаковые команды, или меню и панель инструментов с кнопками, аналогичными командам этого меню.

Помимо текстового содержимого (которое предоставляется через свойство Header), объекты MenuItem могут в действительности отображать еще несколько перечисленных ниже деталей:

миниатюрный значок в области поля сразу же слева от команды меню;

флажок в области поля (в случае указания сразу флажка и значка отображаться будет только флажок);

текст сокращенной клавиатурной команды справа от текста меню (например, текст Ctrl+O для команды Open (Открыть)).

В указании всех этих деталей нет ничего сложного. Для отображения миниатюрного значка необходимо установить свойство MenuItem.Icon. Интересно то, что свойство Icon способно принимать любой объект, что позволяет создавать для отображения даже миниатюрный векторный рисунок. Это дает возможность в полной мере воспользоваться преимуществами не зависящей от разрешения системы масштабирования WPF и отобразить больше деталей при более высоких настройках DPI системы. При желании иметь обычный значок, должен использоваться просто элемент Image с растровым изображением.

Для отображения рядом с элементом меню флажка понадобится установить свойство MenuItem.IsChecked в true. Вдобавок, если IsCheckable равно true, щелчок на данном элементе меню будет переводить его из отмеченного в неотмеченное состояние и наоборот. Однако способа организации группы элементов меню с взаимно исключающей отметкой не существует. Если необходим именно такой эффект, придется писать специальный код, снимающий отметки с других флажков при установке флажка рядом с элементом.

Текст сокращенной клавиатурной команды для элемента меню указывается с помощью свойства MenuItem.InputGestureText. Однако простое отображение этого текста активным его не сделает. Об отслеживании нажатий соответствующих клавиш разработчик должен позаботиться сам. Практически всегда это требует немалой работы, поэтому элементы меню часто используются с командами, позволяющими обеспечить поведение сокращенных клавиатурных команд и InputGestureText за один шаг.

Например, следующий элемент MenuItem связывается с командой ApplicationsCommands.Open:

Доступно также несколько полезных свойств, которые позволяют узнать текущее состояние MenuItem: IsChecked, IsHighlighted, IsPressed и IsSubmenuOpen. Их можно использовать для написания триггеров, применяющих различные стили в ответ на определенные действия.

Класс ContextMenu

Как и Menu, класс ContextMenu содержит коллекцию объектов MenuItem. Разница состоит лишь в том, что ContextMenu не может размещаться в окне. Вместо этого он может использоваться только для установки свойства ContextMenu другого элемента:

Свойство ContextMenu определено в классе FrameworkElement, поэтому оно поддерживается практически всеми элементами WPF. В случае, когда это свойство установлено для элемента, у которого имеется собственное контекстное меню, стандартное меню заменяется тем, что указано в этом свойстве. Если просто нужно удалить существующее меню, установите ContextMenu в null.

Источник

Wpf создание меню в коде

В WPF предлагаются два элемента управления меню: Menu (для главных меню) и ContextMenu (для всплывающих меню, присоединяемых к другим элементам). Как и для всех остальных классов, WPF выполняет визуализацию для элементов управления Menu и ContextMenu. Это означает, что упомянутые элементы управления не являются простыми оболочками Win32 и могут использоваться несколькими необычными способами.

Если класс Menu используется в приложении, обслуживаемом в браузере, он появляется в верхней части страницы. Окно браузера упаковывает страницу приложения и может как включать, так и не включать собственное меню, которое тогда будет отображаться совершенно отдельно.

Класс Menu

В WPF не делается никаких предположений по поводу того, где должно размещаться автономное меню. Обычно оно пристыковывается в верхней части окна с помощью элемента управления DockPanel или верхней строки элемента управления Grid либо просто растягивается по всей ширине окна. Однако на самом деле меню можно размещать где угодно, даже рядом с другими элементами управления. Более того, в окно можно добавлять столько меню, сколько нужно. Хотя особого смысла в этом и нет, но также существует возможность размещать строки меню стопками и вразброс по всему пользовательскому интерфейсу.

Такая свобода действий открывает кое-какие интересные возможности. Например, если вы создадите меню с одним высокоуровневым заголовком и стилизуете его под кнопку, получится всплывающее меню, вызываемое одиночным щелчком мыши. Применение подобных уловок может помочь добиться в точности желаемого эффекта в сложном интерфейсе, а может оказаться и просто более изощренным способом запутывания пользователей.

wpf создание меню в коде. img80100. wpf создание меню в коде фото. wpf создание меню в коде-img80100. картинка wpf создание меню в коде. картинка img80100. нам было поручено разработать корпоративное приложение в WPF, которое заменит приложение WinForms серого цвета линкора современным внешним видом.

Очевидно, что во внешний вид меню и подменю можно вносить и более радикальные изменения с помощью триггеров и шаблонов элементов управления. Базовую логику стилизации можно посмотреть в используемом по умолчанию шаблоне элемента управления MenuItem.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *