Главная » Silverlight » Добавление стиля

0

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

Решение состоит в одновременном создании класса и шаблона. Класс можно раз­местить в файле, который содержит код шаблона, размещенный в библиотеке клас­сов Silverlight. Шаблон элемента управления должен находиться в файле generic.xaml. Если библиотека классов содержит много элементов управления, все шаблоны, исполь­зуемые по умолчанию, должны быть размещены в том же файле generic.xaml. Чтобы добавить файл generic.xaml в проект, выполните следующие операции.

1.    В окне Solution Explorer (Проводник решений) щелкните правой кнопкой мыши на проекте библиотеки класса и выберите в контекстном меню команду Add^New Folder (ДобавитьОНовую папку).

2. Присвойте новой папке имя Themes.

3.    Щелкните правой кнопкой мыши на папке Themes и выберите команду Add^New Item (Добавить^Новый элемент).

4.    В диалоговом окне Add New Item выберите шаблон файла XML, введите имя ge­neric . xaml и щелкните на кнопке Add.

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

Примечание. Файл generic.xaml размещен в папке Themes для совместимости с платформой WPF, в которой учитываются параметры тем Windows. В Silverlight папка Themes используется, несмотря на то что параметры тем не применяются.

Рассмотрим проект Silverlight и библиотеку классов, показанные на рис. 13.9. Проект CustomControl управляет библиотекой классов, содержащей пользовательский элемент управления, а проект CustomControlConsumer — приложением Silverlight, в котором ис­пользуется данная библиотека.

В файле generic.xaml нужно объявить словарь ресурсов. Затем нужно добавить префикс пространства имен XML в пространство имен проекта, чтобы пользователь­ский элемент управления был доступен в разметке (см. главу 2). В данном приме­ре используется пространство имен проекта FlipPanelControl. Сборка имеет имя FlipPanelControl.dll, основанное на имени проекта.

<ResourceDictionary

xmlns="http: //schemas .microsoft .com/winfx/2006/xaml/l‘> presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:FlipPanelControl;

assembly=FlipPanelControl">

</ResourceDictionary>

Рис. 13.9. Приложение и библиотека классов

Обратите внимание на то, что при отображении пространства имен элемента управ­ления необходимо добавить как имя сборки, так и пространство имен проекта. Для пользовательского элемента управления, определенного в приложении, делать так не нужно. Это объясняется тем, что если не задать сборку, платформа Silverlight предпола­гает, что пользовательский элемент управления определен в сборке приложения.

В словаре ресурсов можно определить стиль для элемента управления, например, так.

<Style TargetType="local:FlipPanel"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="local:FlipPanel">

</ControlTemplate> </Setter.Value> </Setter>

</Style>

Чтобы сообщить элементу управления о том, что он должен извлечь из файла generic. xaml стиль, используемый по умолчанию, нужно установить свойство Def ault- StyleKey в конструкторе элемента управления.

public FlipPanel()

{

DefaultStyleKey = typeof(FlipPanel);

)

Свойство DefaultStyleKey определяет тип, используемый при поиске стиля. В дан­ном примере стиль определен с типом FlipPanel, поэтому в свойстве DefaultStyleKey тоже должен использоваться тип FlipPanel. В большинстве ситуаций рекомендуется придерживаться такой структуры. Единственное исключение допустимо в случае, когда более специальный элемент управления наследует существующий класс. Тогда лучше сохранить исходную логику конструктора и производить стандартный стиль от базового класса. Например, при добавлении дополнительной функциональности в настраивае­мую кнопку, производную от класса Button, лучше сохранить стандартный стиль кноп­ки, чтобы не нужно было создавать новый стиль. С другой стороны, если необходимы другие стиль и шаблон, проще добавить стиль с помощью свойства TargetType нового класса и создать новый конструктор, устанавливающий свойство DefaultStyleKey.

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

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