Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Wpf-АК11.doc
Скачиваний:
6
Добавлен:
01.03.2025
Размер:
3 Мб
Скачать
☆

Задание к лабораторной работе

Спроектируйте интерфейс WPF-приложения исходя из индивидуального задания по варианту. Оформите отчет с подробным листингом файлов программы и скриншотами внешнего вида готового приложения.

Варианты индивидуальных заданий

1. Простой текстовый редактор с функциями открытия и сохранения файла.

2. Программа для вывода содержимого каталога на экран.

3. Простой калькулятор, поддерживающий операции +,-,*,/.

4. Программа для рисования графических примитивов (прямоугольник) с функциями сохранения рисунка на жесткий диск.

Контрольные вопросы

1. Что такое MVC и как это реализовано в WPF?

2. Какие типы ресурсов Вам известны?

3. Приведите пример ссылки на ресурс из приложения WPF.

Лабораторная работа 6 Свойства зависимости

Цель: получить практические навыки работы с WPF средствами языка программирования C#.

План лабораторного занятия:

  1. Особенности свойств CLR

  2. Наследование значений свойств зависимости

  3. Присоединенные свойства

  4. Метаданные свойств зависимости

  5. Проверка допустимости значения

Теоретически сведения

1. Особенности свойств clr

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

Свойства CLR определяются следующим образом.

private int x;

public int X

{

   get { return x; }

   set { x = value; }

}

Свойства зависимости — это не просто оболочка, которая возвращает и задает значения.

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

Возможности, доступные с помощью свойств зависимости

Уведомление об изменении

Обратные вызовы

Проверка значений свойств

Наследование значений свойств*

Участие в анимации*

Участие в стилях*

Участие в шаблонах*

Привязка данных

Изменения макета*

Переопределение значений данных по умолчанию*

Примечание.Возможности, отмеченные звездочкой, недоступны без свойств зависимости. Свойство CLR не подходит для них во всех отношениях, а кроме того, Visual Studio или другая интегрированная среда разработки, вероятно, вызовет исключение при попытке использования свойства CLR вместо свойства зависимости.

Свойства зависимости. Свойства зависимости — это усиленная версия их более слабых «родственников», свойств CLR. В процессе разработки платформы WPF майкрософтовская команда WPF решила, что систему свойств нужно изменить, чтобы обеспечить такие возможности, как уведомления об изменении, проверка значений, наследование значений, участие в привязках, анимации, стилях и шаблонах.

Многое в подсистеме свойств зависимости напоминает подсистему перенаправленных событий, и аналогично этой подсистеме для определения собственных свойств зависимости необходимо выполнить несколько действий. А именно:

  • объявить свойство зависимости (всегда public static readonly);

  • инициализировать свойство зависимости с помощью одного из следующих методов: DependencyProperty.RegisterAttached, DependencyProperty.Register, DependencyProperty.RegisterReadOnly или DependencyPropertyRegisterAttachedReadOnly;

  • объявить оболочку свойства для методов get/set (см. примечание ниже).

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

Примечание.Компилятор XAML учитывает оболочку при компиляции, однако во время выполнения платформа WPF вызывает непосредственно базовые методы GetValue и SetValue! Поэтому для обеспечения эквивалентности между заданием свойства в XAML и процедурном коде необходимо, чтобы оболочки свойств НЕ содержали никакой логики, кроме вызовов методов GetValue/SetValue. Если нужно добавить собственную логику, следует использовать зарегистрированные обратные вызовы. Вся платформа WPF построена на принципе соблюдения этого правила в оболочках свойств, так что это предупреждение касается каждого, кто создает собственный класс с собственными свойствами зависимости.

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

Применяется следующий порядок очередности, начиная с самого старшего:

  1. Приведение системы свойств. Например, из активной анимации или приведения базового типа, что даже приводит к перезаписи выполняющейся анимации.

  2. Активные анимации или анимации с поведением Hold (в этом случае у них должно быть последнее анимированное значение).

  3. Локальное значение. Локальное значение может быть задано с помощью свойства «оболочки», что эквивалентно заданию в качестве атрибута или элемента свойства в XAML либо вызову метода SetValue.

  4. Свойства шаблона TemplatedParent. Элемент имеет TemplatedParent, если он был создан как часть шаблона (ControlTemplate или DataTemplate). В шаблоне применяется следующий приоритет:

    • триггеры из шаблона TemplatedParent;

    • наборы свойств (как правило, с помощью атрибутов XAML) в шаблоне TemplatedParent.

  5. Неявный стиль.

  6. Триггеры стиля.

  7. Триггеры шаблона. Любой триггер из шаблона внутри стиля или непосредственно применяемого шаблона.

  8. Методы присвоения стиля.

  9. Стиль по умолчанию (из темы). В стиле по умолчанию применяется следующий порядок приоритетов:

    • активные триггеры в стиле темы;

    • методы присвоения в стиле темы.

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

  1. Значение по умолчанию из метаданных свойства зависимости. У любого заданного свойства зависимости может быть значение по умолчанию, задаваемое при регистрации этого свойства в системе обработки свойств.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]