Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Синхронное использование XAML

Читайте также:
  1. D. Использование несколькими пользователями.
  2. II. Использование различных типов фотоплёнок.
  3. IV Использование компьютеров
  4. IV. Использование светофильтров при съёмке и печати.
  5. VI. Использование материалов портфеля индивидуальных образовательных достижений.
  6. VII. Порядок учета коммунальных услуг с использованием приборов учета, основания и порядок проведения проверок состояния приборов учета и правильности снятия их показаний
  7. А) да, их использование в последнее время относится к профилактической эндодонтии

К сожалению, в случае XAML не существует встроенной поддержки директив препроцессора или схожего приема разделения отличных блоков кода. Конечно, существуют некоторые сторонние решения, однако хоть это и выглядит прогрессивно с точки зрения энтузиаста, кроме случаев действительно больших XAML файлов, сложных в поддержке, обычно более разумно работать с 2 файлами, если различия в разметке не удается обойти. Таким образом, следует либо составлять такую XAML разметку, которая будет корректна как в Silverlight, так и в WPF, и создать ссылку на этот файл в одном из проектов, либо поддерживать 2 параллельные версии файла.

Решение проблем недостающего функционала

Отсутствие FrameworkPropertyMetadata

Как известно, в Silverlight отсутствует класс FrameworkPropertyMetadata. Одна из наиболее часто используемых возможностей этого FrameworkPropertyMetadata по сравнению с имеющемся в Silverlight PropertyMetadata – это логические переключатели, которые управляют влиянием свойства на различные аспекты прорисовки объекта, такие как AffectsMeasure, AffectsArrange, и другие. Если один из флагов установлен в истинное значение, соответствующий аспект объявляется недействительным.

К счастью, данное поведение достаточно легко эмулировать при помощи PropertyMetadata и PropertyChangedCallback. Так, если в случае разработки только для WPF можно написать:

1: public static readonly DependencyProperty SomethingProperty 2: = DependencyProperty.Register(3: "Something", typeof(string), typeof(Window1), 4: new FrameworkPropertyMetadata(string.Empty, 5: FrameworkPropertyMetadataOptions.AffectsMeasure) 6:);

То универсальный WPF/Silverlight код, достигающий такого же эффекта, будет выглядеть следующим образом:

1: public static readonly DependencyProperty SomethingProperty 2: = DependencyProperty.Register(3: "Something", typeof(string), typeof(Window1), 4: new PropertyMetadata(string.Empty, 5: new PropertyChangedCallback(6: Window1.SomethingProperty_Changed))); 7: 8: private static void SomethingProperty_Changed(9: DependencyObject d, DependencyPropertyChangedEventArgs e) 10: { 11: ((FrameworkElement)d).InvalidateMeasure(); 12: }

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


Дата добавления: 2015-08-13; просмотров: 112 | Нарушение авторских прав


Читайте в этой же книге: Класс представления (View). | Класс модели представления (View Model). | Реализация INotifyCollectionChanged. | Создание представления, определенного как шаблон данных. | Краткие итоги | В паттерне MVVM инкапсулирует логику представления и данные для отображения (англ. яз.). | Интерфейс, предоставляющий базовую поддержку валидации данных и сообщения об ошибках | Шаг 4. View | Шаг 4. Редактирование | Шаг 5. Команды |
<== предыдущая страница | следующая страница ==>
Создание ссылок на XAML файлы| Отсутствие метода OverrideMetadata()

mybiblioteka.su - 2015-2024 год. (0.007 сек.)