Изменение внешнего вида примечаний WPF
n/a mb - 1389 переходов
Если вы не любите читать (или просто хотите получить исходный код), вы можете загрузить рассматриваемое приложение в конце статьи.
Основы: Модифицируем стиль StickyNote
Присмотритесь к доступным свойствам класса StickyNoteControl. Используя эти свойства, Вы можете управлять различными аспектами внешнего вида и режима работы Note при помощи операторов Setter и Trigger.
Изменение цвета
Если вы хотите изменить цвет области с каким-либо содержимом (нарпимер, RichTextBox или InkCanvas), присвойте необходимое значение свойству Background:
<Style x:Key="OverrideBackground" TargetType="{x:Type StickyNoteControl}">
<Setter Property="Background" Value="Yellow"/>
</Style>
ПРИМЕЧАНИЕ: это действие не изменит заголовок или размер компонента. Для изменения внешнего вида TitleBar и других частей, содержащих градиент необходимо полностью заменить стиль (см. ниже).
Изменение режима работы StickyNote
Используя открытые свойства класса StickyNoteControl и оператора Trigger, Вы можете управлять поведением (режимом работы) StickyNote. Ниже представлен пример такого использования, в котором размер заметки уменьшается вдвое, и принимающей полный размер после фокусировки мыши на ней.
<Style
x:Key="OverrideSimpleBehavior"
TargetType="{x:Type StickyNoteControl}">
<!—Установка размера заметки по умолчанию. -->
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX=".5" ScaleY=".5"/>
</Setter.Value>
</Setter>
<!—Добавление триггера, изменяющего размер после клика мыши.-->
<Style.Triggers>
<Trigger Property="StickyNoteControl.IsActive" Value="True">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1" ScaleY="1"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
er>
</Style.Triggers>
</Style>[/code]
Более сложный уровень: Замена стиля StickyNote
Если изменение режима работы Note достигается простым добавлением нескольких сеттеров и триггеров, то для значительных изменения внешнего вида Вам надо заменить полностью весь стиль оформления.
Основы создания стиля
При замене стиля существует несколько ограничений. Во-первых, необходимо наличие компонента RichTextBox и в Ink note. Во-вторых, RichTextBox и InkCanvas должны быть объявлены как PART_ContentControl. Следующий пример показывает тот минимум, который необходим для создания стиля для класса StickyNoteControl, который поддерживает режимы Ink и Text:
[code]<Style x:Key="MinimumStyle" TargetType="{x:Type StickyNoteControl}">
<!-- Override default style completely -->
<Setter Property="OverridesDefaultStyle" Value="true" />
<Setter Property="Width" Value="100" />
<Setter Property="Height" Value ="100" />
<Style.Triggers>
<Trigger
Property="StickyNoteControl.StickyNoteType"
Value="{x:Static StickyNoteType.Ink}">
<!-- Custom template that only contains required controls -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<InkCanvas
Name="PART_ContentControl"
Background="LightYellow" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
<Trigger
Property="StickyNoteControl.StickyNoteType"
Value="{x:Static StickyNoteType.Text}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<RichTextBox
Name="PART_ContentControl"
Background="LightYellow"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>[/code]
Небо – это предел (почти)
В исходниках вы можете просмотреть полный проект создания стиля StickyNote. Аналогично ему Вы можете создать тот стиль, который Вам нужен. Ну а теперь перечислим ограничения:
- Нет возможности изменить стиль привязки StickyNote.
- Невозможно изменить программное поведение заметки – это не поддерживается методом обработки сообщений элемента StickyNote, то есть Вы не можете добавлять код или изменять обработчик режима работы.
- Невозможно изменить основное объявление StickyNote – изменение только касается внешнего вида и поведения элемента управления, но, возможно, в будущем можно будет управлять стилем ввода Text или Ink.
Надеюсь, эта информация помогла Вам понять основы изменения внешнего вида элемента StickyNote в ваших приложениях. Я буду с интересом читать о Ваших опытах в данном направлении и смотреть на Ваши творения.
Источник:
Перевод: RLV
По теме
- Создаем контекстно-зависимое WPF-приложение
- #024 – Знакомство с WPF/E
- #023 – Введение в WPF, reloaded…
- #022 Введение в Microsoft Interactive Designer RC1
- #021 Применение 3D в WPF - Часть 2
- #020 Применение 3D в WPF - Часть 1
- #019 Введение в возможности 3D на WPF
- #018 Размещение контрола NET 2.0 на форме WPF
- #017 Первое Web-приложение / Подробнее о Grid / Элемент Frame
- #016 EXE, XBAP, XAML? - Все равно!