Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Windows presentation foundation with - MacDonald M.

MacDonald M. Windows presentation foundation with — Вильямс , 2008. — 928 c.
ISBN 978-5-8459-1429-3
Скачать (прямая ссылка): wpfwindowspresente2008.pdf
Предыдущая << 1 .. 145 146 147 148 149 150 < 151 > 152 153 154 155 156 157 .. 473 >> Следующая

В предыдущем примере привязка команды была сгенерирована с помощью кода. Однако команды так же легко можно привязывать и декларативным образом с помощью ХЛМЬ, если требуется упростить лежащий в основе кода файл. Необходимый для этого код разметки выглядит так:
<Ш1пЬом х:С1азз="СоттапЬз.ТезЬЬемСоттапЬ"
хт1пз="Ь‘ЬЬр://зсЬетаз.т1сгозо:Е'Ь.сот/ш1п:?х/20 0 6/хат1/ргезепЬа'Ь1оп" хт1пз:х="Ь‘ЬЬр://зсЬетаз.т1сгозо:Е'Ь.сот/ш1п:?х/2 00 6/хат1" Т1Р1е="ТезЬЫешСоттапс1">
Book_Pro_WPF-2.mdb 298 19.05.2008 18:10:14
Команды 299
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.New" Executed="NewCommand_Executed"></CommandBinding>
</Window.CommandBindings>
<StackPanel Margin="5">
<Button Padding="5" Command="ApplicationCommands.New”>New</Button>
</StackPanel>
</Window>
К сожалению, в Visual Studio не предлагается никакой поддержки для определения привязок команд во время проектирования, а также предоставляется относительно слабая поддержка для подключения элементов управления и команд. Окно Properties (Свойства) позволяет устанавливать для элемента управления свойство Command (Команда), однако вводить точное имя команды нужно самому — никакого удобного раскрывающегося списка возможных вариантов команд для выбора не предусмотрено.
Использование множества источников команд
Пример с кнопкой немного напоминает обходной путь для инициации обычного события. Однако дополнительный уровень команды начинает приобретать отчетливый смысл при добавлении большего количества использующих эту команду элементов управления. Например, мы можем добавить элемент меню, также работающий с командой New:
<Menu>
<MenuItem Header="File">
<MenuItem Command="New"X/MenuItem>
</MenuItem>
</Menu>
Обратите внимание, что данный объект MenuItem для команды New не устанавливает свойство Header. Все дело в том, что элемент управления MenuItem способен извлекать текст из команды в случае, если свойство Header не устанавливается. (У элемента Button такой возможности нет.) Может показаться, что это является довольно незначительным удобством, но оно играет очень важную роль, если планируется локализация приложения на разных языках. В таком случае изменить текст в одном месте (за счет установки в командах свойства Text) легче, чем отслеживать его во всех окнах.
У класса MenuItem есть еще одна приятная функция. Он автоматически выбирает первую клавишу быстрого вызова команды, которая содержится в коллекции Command.InputBindings (если таковая имеется). В случае объекта ApplicationsCommands.New это означает, что в меню рядом с текстом появляется клавиатурная комбинация <Ctrl+O> (рис. 10.5).
На заметку! Чего у MenuItem нет, так это функции отображения подчеркнутой клавиши доступа. WPF не имеет возможности, позволяющей узнавать, какие команды могут размещаться в меню вместе, поэтому и не может определять подходящие клавиши доступа. Это означает, что при желании использовать в качестве клавиши быстрого доступа <N> (так, чтобы она отображалась в подчеркнутом виде при открытии меню с помощью клавиатуры, и чтобы пользователь мог инициировать команду New путем нажатия этой клавиши), соответствующий текст меню придется задать вручную, не забыв поставить перед клавишей доступа символ подчеркивания. То же самое придется сделать и в случае клавиши быстрого доступа для кнопки.
Рис. 10.5. Элемент меню, использующий команду
Book_Pro_WPF-2.mdb 299 19.05.2008 18:10:15
300 Глава 10
Обратите внимание, что создавать еще одну привязку команды для элемента меню не нужно. Одна привязка, созданная в предыдущем разделе, теперь применяется двумя разными элементами управления, оба из которых передают свою работу одному и тому же обработчику событий.
Точная настройка текста команды
Способность меню автоматически извлекать текст элемента команды может вызвать вопрос о том, а можно ли такое же делать с другими классами ICommandSource, например, с элементом управления Button. Можно, но это требует приложения дополнительных усилий.
В частности, для многократного использования текста команды существуют два способа. Первый подразумевает извлечение текста прямо из статического объекта команды. XAML позволяет делать подобное с помощью расширения Static. Ниже показан пример кода, который извлекает имя команды “New” (Создать) и использует его в качестве текста для кнопки:
<Button Command="New" Content="{x:Static ApplicationCommands.New}"></Button>
Проблема такого подхода состоит в том, что он предполагает просто вызов на объекте команды метода ToString(), что позволяет получить имя команды, но не ее текст. (В случае команд, состоящих из множества слов, лучше использовать текст, а не имя команды, потому что текст включает пробелы.) Данную проблему можно устранить, но для этого потребуется приложить гораздо больше усилий. Также еще одна проблема связана со способом, которым одна кнопка дважды использует одну и ту же команду, что увеличивает вероятность случайного извлечения текста не из той команды.
Поэтому предпочтительным решением считается применение выражения привязки данных. Эта привязка данных является немного необычной, поскольку подразумевает привязку к текущему элементу, захват используемого объекта Command и извлечение его свойства Text. Весь необходимый (и довольно-таки длинный синтаксис) показан ниже:
Предыдущая << 1 .. 145 146 147 148 149 150 < 151 > 152 153 154 155 156 157 .. 473 >> Следующая