Главная » WPF » Оптимизация для инструментальных средств

0

Обеспечение  хорошей  поддержки  со стороны  инструментов – это, наверное, самая  трудная  задача  из всех относящихся к стилям.  Способность  CSS  приме нять несколько  правил к одному элементу в соответствии с описанием  на специ ализированном языке  поражает.  В этом языке  есть поддержка  для  объявления приоритетности правил, выбора по положению  в иерархии, по имени тега, по идентификатору элемента и т.д. CSS предлагает невероятно  мощную, но и очень сложную для инструментов модель.

Одна из проблем, связанных с принятым в CSS подходом к выбору стиля на ос нове правил, – это то, что процесс односторонний. Если есть набор правил, то мы можем определить, на какие элементы он воздействует.  Но если свойство элемента изменяется, то практически невозможно определить,  какой  стиль  должен  «вла деть» этим свойством. Пусть нужно, чтобы визуальный конструктор обновил опре деление стиля, когда мы изменяем  значение некоторого свойства, так чтобы новый стиль можно было использовать и для других элементов. Единственный способ ре шить эту задачу при такой сложной системе правил – постулировать некоторые уп рощения; в CSS общепринято идентифицировать стили именами классов.

В WPF возможности выбора стиля  намеренно  ограничены;  в любой момент времени  на каждый элемент  воздействуют  ровно два стиля, и лишь один из них может быть настроен программистом, который использует элемент (второй задан по умолчанию  автором  элемента).  Есть  только  два способа  определить,  какой стиль использовать:  с помощью прямой ссылки из элемента на именованный ре сурс или на основе типа элемента. По существу, это гибрид стилей Word  и CSS.

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

Последнее важное решение, касающееся  инструментальной поддержки,  – это способ закодировать определение  стиля  в разметке.  Если вы знакомы  с CSS, то, вероятно, помните, что стиль определяется набором пар «имя значение»:

Button {

Background = Red; FontSize = 24pt;

}

Это элегантный  и компактный синтаксис, но у него есть два недостатка. Пер вый связан, главным  образом, с инструментами: механизм  синтаксического ана лиза и обработки  стилей  при такой  записи  кардинально отличается  от всех ос тальных  частей системы (где повсеместно  применяется язык XML).  Это сильно усложняет инструмент.  Поскольку в WPF мы отдаем предпочтение  XML, то ре шили кодировать  стили в нотации XAML:

<Style TargetType=’{x:Type Button}’>

<Setter Property=’Background’ Value=’Red’ />

<Setter Property=’FontSize’ Value=’24pt’ />

</Style>

Вторая  проблема  касается  композиции: в нотации  CSS нет удобного способа организовать иерархию  сложных  значений.  А на XAML  мы можем  определить произвольно сложные конструкции:

<Style TargetType=’{x:Type Button}’>

<Setter Property=’Background’>

<Setter.Value>

<LinearGradientBrush …>

</LinearGradientBrush>

</Setter.Value>

</Setter>

<Setter Property=’FontSize’ Value=’24pt’ />

</Style>

Уяснив  принципы композиции элементов,  унифицированной стилизации и оптимизации для инструментов, мы можем перейти  к деталям  работы системы стилизации.

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

  • Комментарии