Silverlight предлагает множество элементов управления, они были рассмотрены в нескольких предыдущих лекциях, а также возможность создания собственных элементов управления. Все поставляемые элементы управления Silverlight уже по умолчанию выглядят гармонично и насыщенно, но если возникнет необходимость изменить их стандартный вид соответственно собственному дизайну, Silverlight 2 предлагает мощные возможности стилевого оформления и шаблонов, которые могут использоваться для изменения представления вашего приложения.
Чтобы понять, что такое стилевое оформление, рассмотрим простой пример использования кнопки в Silverlight-приложении. Далее представлен XAML для элемента управления Button:
<Canvas Background="LightBlue"> <Button x:Name="btn" Content="Click Me!" Width = "140"> </Button> </Canvas>
Это обеспечит отображение кнопки в стандартном стиле Silverlight (серебристого цвета, как будто с подсветкой сверху), как можно увидеть на рис. 12.1.
(рис 12.1) Базовая кнопка SilverlightКак было показано в лекц. 7, "Элементы управления Silverlight: представления и компоновки", и в лекц. 8, "Элементы управления Silverlight: расширенные элементы управления", многие элементы управления Silverlight, включая Button, являются элементами управления с содержимым,т.е. могут формировать визуальное представление XAML-содержимого. В случае с Button это означает, что он может включать кое-что более интересное, чем просто строка "Click Me!" (Щелкни меня!), и что в него можно добавлять некоторую функциональность, обеспечивающую пользователю более широкие возможности при взаимодействии с этим элементом управления.
Например, создадим кнопку с изображением. Для этого используем изображение как содержимое кнопки. Например:
<Canvas Background="LightBlue">
<Button Canvas.Left="40" Canvas.Top="40" x:Name="btn"
Width="60" Height="80">
<Button.Content>
<StackPanel Orientation = "Vertical">
<Image Source="icon.jpg" Height="48"
Width = "48">
</Image>
<TextBlock Text="Click!"> </TextBlock>
</StackPanel>
</Button.Content>
</Button>
</Canvas>
Как это выглядит на экране, представлено на рис. 12.2.
(рис 12.2) Кнопка, использующая XAML содержимоеВас не устраивает стандартный шрифт и цвет надписи на кнопке, и вы хотите еще больше изменить ее внешний вид? Сделать это в XAML довольно просто. Можно задать свойства, включающие семейство шрифтов, размер, насыщенность и т.д., настраивающие внешний вид кнопки. Например, посмотрим на обновленный TextBlock:
<TextBlock Text="Click!" FontFamily="Comic Sans Ms"
Foreground="MediumBlue" FontSize="20">
</TextBlock>
Также добавим несколько других реализаций кнопки. В XAML это сделать довольно просто, потому что можно просто скопировать первую кнопку, а затем задать свойства расположения. Пример представлен на рис. 12.3.
(рис 12.3) Несколько экземпляров элемента управления ButtonВыглядит славно и очень просто реализуется, но использование такого подхода приведет к разрастанию XAML и, что еще хуже, большому количеству повторяющегося кода, что усложнит проверку, отладку, обслуживание и обновление приложения.
Возьмем элементы управления TextBlock. Для каждого из них явно объявлены свойства FontFamily, Foreground и FontSize, несмотря на то, что всем им задано одно и то же значение. А что, если требуется изменить какое-то из этих значений. Придется просматривать каждый элемент управления один за другим, чтобы обновить их все.
Вот где возникает необходимость в стилях. Давайте рассмотрим, как вынести некоторые из этих данных в стиль.
Стиль создается в разделе <Resources> (Ресурсы) контейнера. Здесь может быть создан один или более стилей, для которых задается имя стиля и тип объекта, к которому будет применяться стиль. Например, чтобы создать стиль TextBlockStyle (Стиль текстового блока) для элемента управления TextBlock, используется такой XAML:
<Style TargetType="TextBlock"
x:Key="TextBlockStyle">
</Style>
Для стиля задается тип элемента управления, к которому он может применяться. Однако то, что этот стиль предполагается для TextBlock, не означает, что все экземпляры TextBlock будут использовать его. Вы не ограничены одним стилем для одного типа. В стиле должен быть задан тип элемента управления, для которого предназначен стиль и Key (Ключ) стиля. Таким образом, можно иметь множество разных описаний стилей для элемента управления TextBlock с разными Key. Тогда, задавая свойство Style (Стиль) для разных TextBlock, вы просто выбираете тот стиль, который желаете применить к тому или иному TextBlock, по имени. Это будет продемонстрировано через мгновение, но сначала рассмотрим настройку стиля свойств TextBlock.
Это выполняется с помощью (Установщик). это тег XAML, определяющий свойство и значение,которое необходимо задать этому свойству.
Далее представлен XAML, используемый ранее для задания свойств Text, FontFamily Foreground и Font-Size элемента TextBlock:
<TextBlock Text="Click!" FontFamily="Comic Sans Ms"
Foreground="MediumBlue" FontSize="20">
</TextBlock>
И вот теперь стиль, который делает то же самое:
<Style TargetType="TextBlock" x:Key="TextBlockStyle"> <Setter Property="FontFamily" Value="Comic Sans Ms"> </Setter> <Setter Property="Text" Value="Click!"> </Setter> <Setter Property="Foreground" Value="MediumBlue"> </Setter> <Setter Property="FontSize" Value="20"> </Setter> </Style>
Применяется этот стиль к TextBlock посредством свойства Style. Поскольку стиль определен как ресурс, для задания имени стиля используется синтаксис с ключевым словом StaticResource (Статический ресурс):
<TextBlock Style="{StaticResource TextBlockStyle}">
</TextBlock>
И теперь все свойства, применяемые к элементам управления TextBlock кнопки, задаются в одном месте, что значительно упрощает обслуживание и делает XAML удобным для восприятия и понимания.
Любое из свойств, определенных стилем, можно переопределить, просто задавая его в самом объекте. Например, требуется переопределить свойство Foreground, заданное стилем MediumBlue (Светло-синий). Сделать это очень просто, как показано в примере:
<TextBlock Style="{StaticResource TextBlockStyle}"
Foreground = "Black">
</TextBlock>
В этом случае, заданное здесь свойство Foreground переопределяет настройку стиля, и теперь для текста TextBlock будет использоваться черный цвет.
Также обратите внимание, что хотя стиль в данном примере определен для TextBlock, располагающегося в кнопке с изображением, он может применяться к любому TextBlock в данном Canvas.
В примере из предыдущего раздела, стиль создавался в Canvas, содержащем элементы управления. Это ограничивает область действия этого стиля данным Canvas. Поэтому если в приложении имеется несколько страниц, пришлось бы определять стили на каждой страницы, что весьма неэффективно.
К счастью, Silverlight позволяет описывать стили для всего приложения, задавая их в App.xaml. В стандартном файле App.xaml, создаваемом шаблоном Visual Studio, уже определен раздел Resources!
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xam l"
x:Class="SilverlightApplication1.App">
<Application.Resources>
</Application.Resources>
</Application>
Итак, размещенные здесь описания стилей будут доступны всему приложению. Рассмотрим пример:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xam l"
x:Class="SilverlightApplication1.App">
<Application.Resources>
<Style TargetType="TextBlock" x:Key="TextBlockStyle">
<Setter Property="FontFamily" Value="Comic Sans Ms">
</Setter>
<Setter Property="Text" Value="Click!">
</Setter>
<Setter Property="Foreground" Value="MediumBlue">
</Setter>
<Setter Property="FontSize" Value="20">
</Setter>
</Style>
</Application.Resources>
</Application>
Применяя этот стиль, можно задавать стиль любого TextBlock в приложении, используя один и тот же синтаксис. Точно также можно переопределить любое из свойств Style, задавая их для конкретного элемента управления.
В предыдущем разделе была создана кнопка с изображением и использован факт, что кнопка является элементом управления с содержимым. Это позволило создать не просто кнопку с надписью, а включить в нее XAML, описывающий StackPanel с изображением ( Image ) и текстовым блоком ( TextBlock ). Затем вы научились с помощью стилей эффективно применять единообразные настройки к свойствам нескольких элементов TextBlock.
Следующий логический шаг - определение стиля сразу всего элемента управления, состоящего из Button и образующих его элементов управления, т.е. StackPanel, Image и TextBlock. Вот где шаблоны становятся основными средствами настройки внешнего вида ваших Silverlight-приложений!
Шаблоны действуют абсолютно аналогично стилям: размещаются в разделе Resources и описываются с помощью . Чтобы создать Template (Шаблон), задается свойство Template и затем с помощью < определяется ControlTemplate для заданного элемента управления:
Проще в этом разобраться, взглянув на код:
<Canvas.Resources>
<Style TargetType="TextBlock" x:Key="TextBlockStyle">
<Setter Property="FontFamily" Value="Comic Sans Ms">
</Setter>
<Setter Property="Text" Value="Click!">
</Setter>
<Setter Property="Foreground" Value="MediumBlue">
</Setter>
<Setter Property="FontSize" Value="20">
</Setter>
</Style>
<Style x:Key="ImageButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Button >
<Button.Content>
<StackPanel Orientation="Vertical">
<Image Source="icon.jpg" Height="48"
Width="48">
</Image>
<TextBlock Style="{StaticResource TextBlockStyle}"
Foreground = " Black" >
</TextBlock>
</StackPanel>
</Button. Content >
</Button>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Canvas.Resources>
Здесь создается стиль , в котором используется для свойства Template. В нем содержится ControlTemplate, описывающий Button, которую мы видели ранее, включающую StackPanel с Image и TextBlock.
Обратите внимание, что здесь также может использоваться ссылка на стиль, потому что для элемента управления TextBlock, используемого в шаблоне, задан созданный ранее стиль TextBlockStyle.
Теперь XAML для объявления кнопок стал еще проще:
<Button x:Name="btn1" Style="{StaticResource ImageButton}"
Canvas.Top="20" Canvas.Left="20">
</Button>
<Button x:Name="btn2" Style="{StaticResource ImageButton}"
Canvas.Top="20" Canvas.Left="120">
</Button>
<Button x:Name="btn3" Style="{StaticResource ImageButton}"
Canvas.Top="20" Canvas.Left="220">
</Button>
Для каждой кнопки в качестве значения Style задан ресурс , который, в свою очередь, определяет шаблон для всего элемента управления. На рис. 12.4 показан результат выполнения этого XAML
(рис 12.4) Кнопки, заданные шаблономПо-настоящему замечательное свойство шаблонов в том, что в шаблоне не обязательно присутствие типа элемента управления, шаблон которого создается. Вероятно, звучит немного запутанно, поэтому рассмотрим пример, чтобы разобраться во всем. Выше в этом разделе был определен шаблон для кнопки с содержимым, которое делает ее простой кнопкой с изображением. Но, чтобы создать шаблон кнопки, элемент управления Button, по сути, не нужен. Можно без труда создать кнопки с изображением и текстом, не беря за основу стандартный элемент управления Button. Рассмотрим шаблон:
<Style x:Key="ImageButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<StackPanel Orientation = "Vertical">
<Image Source="icon.jpg" Height="48" Width="48">
</Image>
<TextBlock Style="{StaticResource TextBlockStyle}"
Foreground = "Black" >
</TextBlock>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Таким образом, мы получили шаблон (заданный с помощью TargetType ) вообще без элемента управления Button, но Silverlight будет интерпретировать его как кнопку, включая все соответствующие свойства и события. Например, если применить этот шаблон (бескнопочный), при выполнении приложения на экране можно будет увидеть примерно следующее (рис. 12.5).
(рис 12.5) Бескнопочные шаблоны для кнопкиУбедиться в том, что это настоящие кнопки, можно, попробовав написать код для них. Например, они имеют полную поддержку IntelliSense элемента управления Button в Microsoft Visual Studio. Это можно увидеть на рис. 12.6, где представлено написание кода для события Click.
(рис 12.6) Написание кода для кнопки, создаваемой по шаблонуПоскольку шаблоны - это просто особые стили, их тоже можно описывать в App.xaml, чтобы сделать доступными для применения на многих страницах XAML
В данной лекции мы познакомились со стилями и шаблонами. Это очень важные возможности Silverlight, потому что они позволяют унифицировать и настраивать внешний вид и поведение всех создаваемых вами элементов управления. Вы научились объявлять стиль и использовать его как статический ресурс ( StaticResource ) элемента управления. Затем было показано, как использовать стиль во всем приложении, задавая его в App.xaml.
Наконец, вы увидели, как эта возможность может быть расширена с помощью шаблонов. Шаблоны аналогичны стилям, но позволяют описать стиль всего элемента управления. Был продемонстрирован , созданный без использования Button, но все равно обладающий всеми свойствами, методами и событиями Button, благодаря объявлению ControlTemplate для него.
В следующей лекции будет представлен еще один аспект Silverlight 2 и более подробно рассмотрены элементы управления ASP.NET, предлагаемые в Silverlight SDK.
Silverlight предлагает множество элементов управления, они были рассмотрены в нескольких предыдущих лекциях, а также возможность создания собственных элементов управления. Все поставляемые элементы управления Silverlight уже по умолчанию выглядят гармонично и насыщенно, но если возникнет необходимость изменить их стандартный вид соответственно собственному дизайну, Silverlight 2 предлагает мощные возможности стилевого оформления и шаблонов, которые могут использоваться для изменения представления вашего приложения.
Чтобы понять, что такое стилевое оформление, рассмотрим простой пример использования кнопки в Silverlight-приложении. Далее представлен XAML для элемента управления Button:
<Canvas Background="LightBlue"> <Button x:Name="btn" Content="Click Me!" Width = "140"> </Button> </Canvas>
Это обеспечит отображение кнопки в стандартном стиле Silverlight (серебристого цвета, как будто с подсветкой сверху), как можно увидеть на рис. 12.1.
(рис 12.1) Базовая кнопка SilverlightКак было показано в лекц. 7, "Элементы управления Silverlight: представления и компоновки", и в лекц. 8, "Элементы управления Silverlight: расширенные элементы управления", многие элементы управления Silverlight, включая Button, являются элементами управления с содержимым,т.е. могут формировать визуальное представление XAML-содержимого. В случае с Button это означает, что он может включать кое-что более интересное, чем просто строка "Click Me!" (Щелкни меня!), и что в него можно добавлять некоторую функциональность, обеспечивающую пользователю более широкие возможности при взаимодействии с этим элементом управления.
Например, создадим кнопку с изображением. Для этого используем изображение как содержимое кнопки. Например:
<Canvas Background="LightBlue">
<Button Canvas.Left="40" Canvas.Top="40" x:Name="btn"
Width="60" Height="80">
<Button.Content>
<StackPanel Orientation = "Vertical">
<Image Source="icon.jpg" Height="48"
Width = "48">
</Image>
<TextBlock Text="Click!"> </TextBlock>
</StackPanel>
</Button.Content>
</Button>
</Canvas>
Как это выглядит на экране, представлено на рис. 12.2.
(рис 12.2) Кнопка, использующая XAML содержимоеВас не устраивает стандартный шрифт и цвет надписи на кнопке, и вы хотите еще больше изменить ее внешний вид? Сделать это в XAML довольно просто. Можно задать свойства, включающие семейство шрифтов, размер, насыщенность и т.д., настраивающие внешний вид кнопки. Например, посмотрим на обновленный TextBlock:
<TextBlock Text="Click!" FontFamily="Comic Sans Ms"
Foreground="MediumBlue" FontSize="20">
</TextBlock>
Также добавим несколько других реализаций кнопки. В XAML это сделать довольно просто, потому что можно просто скопировать первую кнопку, а затем задать свойства расположения. Пример представлен на рис. 12.3.
(рис 12.3) Несколько экземпляров элемента управления ButtonВыглядит славно и очень просто реализуется, но использование такого подхода приведет к разрастанию XAML и, что еще хуже, большому количеству повторяющегося кода, что усложнит проверку, отладку, обслуживание и обновление приложения.
Возьмем элементы управления TextBlock. Для каждого из них явно объявлены свойства FontFamily, Foreground и FontSize, несмотря на то, что всем им задано одно и то же значение. А что, если требуется изменить какое-то из этих значений. Придется просматривать каждый элемент управления один за другим, чтобы обновить их все.
Вот где возникает необходимость в стилях. Давайте рассмотрим, как вынести некоторые из этих данных в стиль.
Стиль создается в разделе <Resources> (Ресурсы) контейнера. Здесь может быть создан один или более стилей, для которых задается имя стиля и тип объекта, к которому будет применяться стиль. Например, чтобы создать стиль TextBlockStyle (Стиль текстового блока) для элемента управления TextBlock, используется такой XAML:
<Style TargetType="TextBlock"
x:Key="TextBlockStyle">
</Style>
Для стиля задается тип элемента управления, к которому он может применяться. Однако то, что этот стиль предполагается для TextBlock, не означает, что все экземпляры TextBlock будут использовать его. Вы не ограничены одним стилем для одного типа. В стиле должен быть задан тип элемента управления, для которого предназначен стиль и Key (Ключ) стиля. Таким образом, можно иметь множество разных описаний стилей для элемента управления TextBlock с разными Key. Тогда, задавая свойство Style (Стиль) для разных TextBlock, вы просто выбираете тот стиль, который желаете применить к тому или иному TextBlock, по имени. Это будет продемонстрировано через мгновение, но сначала рассмотрим настройку стиля свойств TextBlock.
Это выполняется с помощью (Установщик). это тег XAML, определяющий свойство и значение,которое необходимо задать этому свойству.
Далее представлен XAML, используемый ранее для задания свойств Text, FontFamily Foreground и Font-Size элемента TextBlock:
<TextBlock Text="Click!" FontFamily="Comic Sans Ms"
Foreground="MediumBlue" FontSize="20">
</TextBlock>
И вот теперь стиль, который делает то же самое:
<Style TargetType="TextBlock" x:Key="TextBlockStyle"> <Setter Property="FontFamily" Value="Comic Sans Ms"> </Setter> <Setter Property="Text" Value="Click!"> </Setter> <Setter Property="Foreground" Value="MediumBlue"> </Setter> <Setter Property="FontSize" Value="20"> </Setter> </Style>
Применяется этот стиль к TextBlock посредством свойства Style. Поскольку стиль определен как ресурс, для задания имени стиля используется синтаксис с ключевым словом StaticResource (Статический ресурс):
<TextBlock Style="{StaticResource TextBlockStyle}">
</TextBlock>
И теперь все свойства, применяемые к элементам управления TextBlock кнопки, задаются в одном месте, что значительно упрощает обслуживание и делает XAML удобным для восприятия и понимания.
Любое из свойств, определенных стилем, можно переопределить, просто задавая его в самом объекте. Например, требуется переопределить свойство Foreground, заданное стилем MediumBlue (Светло-синий). Сделать это очень просто, как показано в примере:
<TextBlock Style="{StaticResource TextBlockStyle}"
Foreground = "Black">
</TextBlock>
В этом случае, заданное здесь свойство Foreground переопределяет настройку стиля, и теперь для текста TextBlock будет использоваться черный цвет.
Также обратите внимание, что хотя стиль в данном примере определен для TextBlock, располагающегося в кнопке с изображением, он может применяться к любому TextBlock в данном Canvas.
В примере из предыдущего раздела, стиль создавался в Canvas, содержащем элементы управления. Это ограничивает область действия этого стиля данным Canvas. Поэтому если в приложении имеется несколько страниц, пришлось бы определять стили на каждой страницы, что весьма неэффективно.
К счастью, Silverlight позволяет описывать стили для всего приложения, задавая их в App.xaml. В стандартном файле App.xaml, создаваемом шаблоном Visual Studio, уже определен раздел Resources!
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xam l"
x:Class="SilverlightApplication1.App">
<Application.Resources>
</Application.Resources>
</Application>
Итак, размещенные здесь описания стилей будут доступны всему приложению. Рассмотрим пример:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xam l"
x:Class="SilverlightApplication1.App">
<Application.Resources>
<Style TargetType="TextBlock" x:Key="TextBlockStyle">
<Setter Property="FontFamily" Value="Comic Sans Ms">
</Setter>
<Setter Property="Text" Value="Click!">
</Setter>
<Setter Property="Foreground" Value="MediumBlue">
</Setter>
<Setter Property="FontSize" Value="20">
</Setter>
</Style>
</Application.Resources>
</Application>
Применяя этот стиль, можно задавать стиль любого TextBlock в приложении, используя один и тот же синтаксис. Точно также можно переопределить любое из свойств Style, задавая их для конкретного элемента управления.
В предыдущем разделе была создана кнопка с изображением и использован факт, что кнопка является элементом управления с содержимым. Это позволило создать не просто кнопку с надписью, а включить в нее XAML, описывающий StackPanel с изображением ( Image ) и текстовым блоком ( TextBlock ). Затем вы научились с помощью стилей эффективно применять единообразные настройки к свойствам нескольких элементов TextBlock.
Следующий логический шаг - определение стиля сразу всего элемента управления, состоящего из Button и образующих его элементов управления, т.е. StackPanel, Image и TextBlock. Вот где шаблоны становятся основными средствами настройки внешнего вида ваших Silverlight-приложений!
Шаблоны действуют абсолютно аналогично стилям: размещаются в разделе Resources и описываются с помощью . Чтобы создать Template (Шаблон), задается свойство Template и затем с помощью < определяется ControlTemplate для заданного элемента управления:
Проще в этом разобраться, взглянув на код:
<Canvas.Resources>
<Style TargetType="TextBlock" x:Key="TextBlockStyle">
<Setter Property="FontFamily" Value="Comic Sans Ms">
</Setter>
<Setter Property="Text" Value="Click!">
</Setter>
<Setter Property="Foreground" Value="MediumBlue">
</Setter>
<Setter Property="FontSize" Value="20">
</Setter>
</Style>
<Style x:Key="ImageButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Button >
<Button.Content>
<StackPanel Orientation="Vertical">
<Image Source="icon.jpg" Height="48"
Width="48">
</Image>
<TextBlock Style="{StaticResource TextBlockStyle}"
Foreground = " Black" >
</TextBlock>
</StackPanel>
</Button. Content >
</Button>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Canvas.Resources>
Здесь создается стиль , в котором используется для свойства Template. В нем содержится ControlTemplate, описывающий Button, которую мы видели ранее, включающую StackPanel с Image и TextBlock.
Обратите внимание, что здесь также может использоваться ссылка на стиль, потому что для элемента управления TextBlock, используемого в шаблоне, задан созданный ранее стиль TextBlockStyle.
Теперь XAML для объявления кнопок стал еще проще:
<Button x:Name="btn1" Style="{StaticResource ImageButton}"
Canvas.Top="20" Canvas.Left="20">
</Button>
<Button x:Name="btn2" Style="{StaticResource ImageButton}"
Canvas.Top="20" Canvas.Left="120">
</Button>
<Button x:Name="btn3" Style="{StaticResource ImageButton}"
Canvas.Top="20" Canvas.Left="220">
</Button>
Для каждой кнопки в качестве значения Style задан ресурс , который, в свою очередь, определяет шаблон для всего элемента управления. На рис. 12.4 показан результат выполнения этого XAML
(рис 12.4) Кнопки, заданные шаблономПо-настоящему замечательное свойство шаблонов в том, что в шаблоне не обязательно присутствие типа элемента управления, шаблон которого создается. Вероятно, звучит немного запутанно, поэтому рассмотрим пример, чтобы разобраться во всем. Выше в этом разделе был определен шаблон для кнопки с содержимым, которое делает ее простой кнопкой с изображением. Но, чтобы создать шаблон кнопки, элемент управления Button, по сути, не нужен. Можно без труда создать кнопки с изображением и текстом, не беря за основу стандартный элемент управления Button. Рассмотрим шаблон:
<Style x:Key="ImageButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<StackPanel Orientation = "Vertical">
<Image Source="icon.jpg" Height="48" Width="48">
</Image>
<TextBlock Style="{StaticResource TextBlockStyle}"
Foreground = "Black" >
</TextBlock>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Таким образом, мы получили шаблон (заданный с помощью TargetType ) вообще без элемента управления Button, но Silverlight будет интерпретировать его как кнопку, включая все соответствующие свойства и события. Например, если применить этот шаблон (бескнопочный), при выполнении приложения на экране можно будет увидеть примерно следующее (рис. 12.5).
(рис 12.5) Бескнопочные шаблоны для кнопкиУбедиться в том, что это настоящие кнопки, можно, попробовав написать код для них. Например, они имеют полную поддержку IntelliSense элемента управления Button в Microsoft Visual Studio. Это можно увидеть на рис. 12.6, где представлено написание кода для события Click.
(рис 12.6) Написание кода для кнопки, создаваемой по шаблонуПоскольку шаблоны - это просто особые стили, их тоже можно описывать в App.xaml, чтобы сделать доступными для применения на многих страницах XAML
В данной лекции мы познакомились со стилями и шаблонами. Это очень важные возможности Silverlight, потому что они позволяют унифицировать и настраивать внешний вид и поведение всех создаваемых вами элементов управления. Вы научились объявлять стиль и использовать его как статический ресурс ( StaticResource ) элемента управления. Затем было показано, как использовать стиль во всем приложении, задавая его в App.xaml.
Наконец, вы увидели, как эта возможность может быть расширена с помощью шаблонов. Шаблоны аналогичны стилям, но позволяют описать стиль всего элемента управления. Был продемонстрирован , созданный без использования Button, но все равно обладающий всеми свойствами, методами и событиями Button, благодаря объявлению ControlTemplate для него.
В следующей лекции будет представлен еще один аспект Silverlight 2 и более подробно рассмотрены элементы управления ASP.NET, предлагаемые в Silverlight SDK.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.