Главная » Silverlight » Повторное использование пользовательского шаблона

0

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

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

<UserControl.Resources> <ControlTemplate х:Key="ButtonTemplate" TargetType="Button" >

<Border BorderBrush="Orange" BorderThickness="3" CornerRadius="10" Background="Red"> <TextBlock Foreground="White" Text="KHonKa на основе iua6noHa"x/TextBlock> </Border> </ControlTemplate>

</UserControl.Resources>

После этого шаблон можно применить с помощью ссылки на ресурс StaticResource.

<Button Template="{StaticResource ButtonTemplate}" Content="KHonKa на основе шаблона" … >

</Button>

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

Шаблон можно определить как часть стиля. Тогда с помощью объектов Setter сти­ля можно будет настраивать свойства, не входящие в шаблон. При установке свойства Style кнопки на ее внешний вид влияют все объекты Setter, что позволяет как приме­нить шаблон, так и настроить другие свойства.

Примечание. Существует несколько рекомендаций, которые необходимо учитывать при создании набора связанных стилей, применяемых к элементам управления Silverlight. Все стили лучше определить в одном файле App.xaml. Кроме того, общие детали стилей рекомендуется разместить в отдельных ресурсах. Например, если во всех элементах управления при выделении применяется один и тот же эффект подсвечивания, создайте отдельный ресурс HighlightBrush и примените его в шаблонах элементов управления.

Заполнитель ContentPresenter

В предыдущем примере рассмотрена довольно бесполезная кнопка, выводящая жестко закодированный текст. В реальных задачах желательно извлечь из кнопки ее свойство Button.Content и добавить его в пользовательский шаблон. Для извлечения свойства можно использовать объект ContentPresenter.

Фактически объект ContentPresenter является маркером, сообщающим, куда будет вставлено содержимое. Добавить его в рассмотренный выше пример можно следующим образом.

<ControlTemplate x:Key="ButtonTemplate" TargetType="Button"> <Border BorderBrush="Orange" BorderThickness="3" CornerRadius="10" Background="Red"> <ContentPresenterX/ContentPresenter>

</Border>

</ControlTemplate>

Примечание. Объект ContentPresenter — не единственный заполнитель, используемый при разработке пользовательских шаблонов, хотя он используется чаще других. В шаблонах элементов управления ItemsControl, создающих списки, применяется объект itemsPresenter, указывающий, где будет размещена панель, содержащая список. Прокручиваемое содержимое элемента управления ScrollViewer представляется заполнителем ScrollContentPresenter.

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

По теме:

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