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

Суворов С. "Танк Т-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 .. 175 176 177 178 179 180 < 181 > 182 183 184 185 186 187 .. 473 >> Следующая

<Window.Resources>
<Style TargetType="Button">
<Setter Property="FontFamily" Value="Times New Roman" />
<Setter Property="FontSize" Value="18" />
<Setter Property="FontWeight" Value="Bold" />
</Style>
</Window.Resources>
Book_Pro_WPF-2.mdb 352 19.05.2008 18:10:22
Стили 353
<StackPanel Margin="5">
<Button Padding="5" Margin="5">Customized Button</Button>
<TextBlock Margin="5">Normal Content.</TextBlock>
<Button Padding="5" Margin="5" Style="{x:Null}">A Normal Button</Button> <TextBlock Margin="5">More normal Content.</TextBlock>
<Button Padding="5" Margin="5">Another Customized Button</Button>
</StackPanel>
В этом примере средняя кнопка явно заменяет стиль. Вместо того чтобы предоставлять свой собственный новый стиль, она устанавливает для свойства Style значение null, что эффективно удаляет ранее установленный стиль.
Хотя автоматически применяемые стили и удобны, они могут усложнять дизайн. Ниже перечислено несколько возможных причин.
• В сложном окне с множеством стилей и множество уровней стилей становится трудно отслеживать то, устанавливается ли данное свойство с помощью наследования значений свойств или с помощью стиля (и если оно устанавливается с помощью стиля, то с помощью какого именно). В результате в случае возникновения необходимости изменить даже какую-нибудь простую деталь может потребоваться просматривать код разметки всего окна.
• Форматирование в окне часто сначала является более общим, а потом постепенно усложняется. В случае применения к окну автоматических стилей где-нибудь на раннем этапе, скорее всего, далее эти стили потребуется переопределять во многих местах с помощью явных стилей. А это значительно усложняет весь дизайн. Гораздо проще будет создать именованные стили для каждой комбинации необходимых характеристик форматирования и применять их по имени.
• В случае создания автоматического стиля, например, для элемента TextBox, обязательно придется вносить изменения в другие элементы управления, которые используют этот элемент TextBlock (например, в управляемый шаблоном элемент управления ListBox).
Во избежание таких проблем лучше всего применять автоматические стили рассудительно. Например, может оказаться лучше использовать автоматический стиль не для всего окна, а только для придания однообразного заполнения кнопкам или для управления параметрами полей элементов TextBox в конкретном контейнере.
Триггеры
Одна из тем в WPF посвящена тому, что можно делать декларативно. Используя хоть стили, хоть ресурсы, хоть связывание данных, нередко довольно много можно сделать, и не прибегая к помощи кода.
Триггеры являются еще одним примером такой тенденции. Используя триггеры, можно автоматизировать процесс внесения простых изменений в стили, обычно требующий создания стандартной логики обработки событий. Например, можно обеспечить реакцию на изменение значения свойства и автоматическое корректирование стиля соответствующим образом.
Триггеры связываются со стилями через коллекцию Style.Triggers. Каждый стиль может иметь неограниченное количество триггеров, а каждый триггер является экземпляром класса, который наследуется от System.Windows.TriggerBase. Доступные варианты перечислены в табл. 12.2.
С помощью коллекции FrameworkElement.Triggers триггеры можно применять к элементам напрямую, не создавая никакого стиля. Однако здесь имеется одно серьезное ограничение. Эта коллекция Triggers поддерживает только триггеры событий.
Book_Pro_WPF-2.mdb 353 19.05.2008 18:10:22
354 Глава 12
(Никаких технических оснований для этого ограничения нет; просто разработчики WPF не успели завершить эту функциональную возможность и, скорее всего, сделают это в следующих версиях.)
Таблица 12.2. Классы, унаследованные от TriggerBase
Имя
Описание
Trigger
MultiTrigger
DataTrigger
MultiDataTrigger
EventTrigger
Это триггер самого простого типа. Он следит за появлением изменений в свойстве зависимостей и затем использует объект Setter для изменения стиля. Этот триггер похож на предыдущий, но подразумевает проверку множества условий. Он вступает в силу только после удовлетворения всех этих условий. Этот триггер работает со связыванием данных. Он похож на первый, но только следит за появлением изменений не в свойстве зависимостей, а в любых связанных данных. Этот триггер состоит из множества триггеров данных.
Это наиболее сложный триггер. При возникновении события он применяет соответствующую анимацию.
Простой триггер
Простой триггер (Trigger) можно присоединять к любому свойству зависимостей. Например, создать эффект наведения курсора мыши и фокуса можно путем ответа на изменения в свойствах IsFocused, IsMouseOver и IsPressed класса Control.
В каждом простом триггере идентифицируется свойство, за которым должно вестись наблюдение, и значение, которого следует ожидать. Когда появляется необходимое значение, в действие вступают те установщики (Setter), которые были сохранены в коллекции Trigger.Setters. (К сожалению, использовать с триггером более сложную логику, предусматривающую сравнение значения для проверки того, подпадает ли оно под нужный диапазон, выполнение вычислений и другие операции, нельзя. В таких случаях лучше применять обработчик события.)
Предыдущая << 1 .. 175 176 177 178 179 180 < 181 > 182 183 184 185 186 187 .. 473 >> Следующая