Спонсор: Microsoft
Опубликован: 01.03.2010 | Доступ: свободный | Студентов: 942 / 39 | Оценка: 4.38 / 4.31 | Длительность: 09:26:00
Дополнительный материал 1:

Практикум

< Лекция 7 || Дополнительный материал 1: 12345678910111213

Создание элементов управления

Целью данного практического занятия является создание пользовательских "богатых" элементов управления на основе стандартных. Здесь мы воспользуемся возможностью Silverlight по созданю шаблонов и стилей для стандартных элементов управления. Для выполнения задания необходима Visual Studio.

Задание

Создать пользовательские элементы управления Button, ComboBox и ListBox. Разместить элементы каждый на отдельной странице. Создать меню для навигации по страницам с пользовательскими элементами управления. В проекте SilverlightControls добавим папку \Controls, куда поместим пользовательские элементы управления. В папке Views разместим страницы с этими элементами.

Меню

Создаем проект Silverlight, как в разделе "Создание простого приложения Silverlight", согласно рис. P.1, рис. P.2 и рис. P.3. Называем его SilverlightControls. Разница лишь в том, что используем шаблон Silverlight Navigation Application.

Создание проекта по шаблону Silverlight Navigation Application

увеличить изображение
Рис. P.5. Создание проекта по шаблону Silverlight Navigation Application

Шаблон создаст 2 пункта меню в MainPage.xaml, таких как About и Home, мы его расширяем пунктами Button, ComboBox, ListBox:

<Border x:Name="LinksBorder" 
        Style="{StaticResource LinksBorderStyle}">
    <StackPanel 
        x:Name="LinksStackPanel" 
        Style="{StaticResource LinksStackPanelStyle}">
        <HyperlinkButton 
            x:Name="Link1" 
            Style="{StaticResource LinkStyle}" 
            NavigateUri="/Home" 
            TargetName="ContentFrame" 
            Content="home"/>
        <Rectangle Style="{StaticResource DividerStyle}"/>                    
        <HyperlinkButton 
            x:Name="Link2" Style="{StaticResource LinkStyle}" 
            NavigateUri="/About" 
            TargetName="ContentFrame" 
            Content="about"/>                    
        <Rectangle Style="{StaticResource DividerStyle}"/>                    
        <HyperlinkButton 
            x:Name="Link3" 
            Style="{StaticResource LinkStyle}"                                      
            NavigateUri="/ButtonPage" 
            TargetName="ContentFrame" 
            Content="Button"/>
        <Rectangle Style="{StaticResource DividerStyle}"/>                    
        <HyperlinkButton 
            x:Name="Link4" 
            Style="{StaticResource LinkStyle}" 
            NavigateUri="/ComboBoxPage" 
            TargetName="ContentFrame" 
            Content="ComboBox"/>
        <Rectangle Style="{StaticResource DividerStyle}"/>                    
        <HyperlinkButton 
            x:Name="Link5" 
            Style="{StaticResource LinkStyle}" 
            NavigateUri="/ListBoxPage" 
            TargetName="ContentFrame" 
            Content="ListBox"/>
    </StackPanel>
</Border>

Далее необходимо создать страницы и сами элементы управления.

Элемент Button

Добавляем новый пользовательский элемент управления ButtonControl.xaml (Add/New Item). Размещаем его в каталоге \Controls. Туда же добавим рисунки 4.jpg и SL.png.

Создание пользовательского элемента управления Button

увеличить изображение
Рис. P.6. Создание пользовательского элемента управления Button

Добавим стандартный элемент Button

<Button 
    x:Name="button1"             
    Content="Button1" 
    Click="Button_Click"
    Style="{StaticResource ImageButton}" 
    HorizontalAlignment="Left" Width="77"/>

и улучшим его внешний вид с помощью стиля:

<UserControl.Resources>
   <Style x:Key="TextBlockStyle" TargetType="TextBlock"> 
      <Setter Property="FontFamily" Value="Comic Sans Ms"/>
      <Setter Property="Text" Value="Click!"/>
      <Setter Property="Foreground" Value="MediumBlue"/>
      <Setter Property="FontSize" Value="15"/>
   </Style>
   <Style x:Key="ImageButton" TargetType="Button">
      <Setter Property="Template">
         <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Button>
                   <StackPanel Orientation="Vertical">
                      <Image 
                          Source="SL.png" 
                          Height="65" 
                          Width="65" 
                          Stretch="Fill"/>
                      <TextBlock 
                          Style="{StaticResource TextBlockStyle}" 
                          HorizontalAlignment="Center"/>
                   </StackPanel>
                </Button>
            </ControlTemplate>
         </Setter.Value>
      </Setter>
   </Style>
</UserControl.Resources>
  1. Т.е. кнопка будет состоять из кнопки <Button/>. Эта кнопка является контейнером для <StackPanel/>, которая в свою очередь содержит <Image/> и <TextBlock/>. К текстовому блоку привязан стиль TextBlockStyle. К самой кнопке привязан стиль ImageButton.

Добавляем страницу ButtonPage.xaml для размещения этого элемента, страницу поместим в каталог \Views проекта.

Создание страницы для элемента управления Button

увеличить изображение
Рис. P.7. Создание страницы для элемента управления Button

На странице ButtonPage.xaml добавляем пространство имен класса SilverlightControls:

xmlns:local="clr-namespace:SilverlightControls"

и в сетку страницы сам элемент управления Button:

<local:ButtonControl 
    VerticalAlignment="Top" 
    HorizontalAlignment="Center"/>

После запуска мы получим:

Внешний вид пользовательского элемента управления Button

увеличить изображение
Рис. P.8. Внешний вид пользовательского элемента управления Button

Элемент ComboBox

Добавляем новый пользовательский элемент управления ComboBoxControl.xaml (Add/New Item). Размещаем его в каталоге \Controls. Туда же добавим рисунки 1.jpg, 2.jpg и 3.jpg.

Создание пользовательского элемента управления ComboBox

увеличить изображение
Рис. P.9. Создание пользовательского элемента управления ComboBox

Добавим стандартный элемент ComboBox:

<ComboBox 
   Margin="37,0,0,119" 
   Height="22" 
   VerticalAlignment="Bottom" 
   HorizontalAlignment="Left" 
   Width="65"/>

Добавим три элемента, улучшим вид каждого элемента, с помощью шаблона:

<ComboBox 
    Margin="37,0,0,119" 
    Height="22" 
    VerticalAlignment="Top" 
    HorizontalAlignment="Left" 
    Width="65">
    <ComboBoxItem>
        <StackPanel Orientation="Horizontal">
            <Image 
                Height="100" 
                Width="100" 
                Source="1.jpg"/>
            <TextBlock 
                Text="Ferrari F430" 
                HorizontalAlignment="Right" 
                VerticalAlignment="Center"/>
        </StackPanel>
    </ComboBoxItem>
    <ComboBoxItem>
        <StackPanel Orientation="Horizontal">
            <Image 
                Height="100" 
                Width="100" 
                Source="2.jpg"/>
            <TextBlock 
                Text="Fisker Karma" 
                HorizontalAlignment="Right" 
                VerticalAlignment="Center"/>
        </StackPanel>
    </ComboBoxItem>
    <ComboBoxItem>
        <StackPanel Orientation="Horizontal">
            <Image 
                Height="100" 
                Width="100" 
                Source="3.jpg"/>
            <TextBlock 
                Text="Lamborghini Murcielago LP 640" 
                HorizontalAlignment="Right" 
                VerticalAlignment="Center"/>
        </StackPanel>
    </ComboBoxItem>
</ComboBox>

Каждый пункт списка содержит вложенную панель <StackPanel/>, в которую вложены элементы <Image/> и <TextBlock/>.

Добавляем страницу ComboBoxPage.xaml для размещения этого элемента, страницу поместим в каталог \Views проекта.

Создание страницы для элемента управления ComboBox

увеличить изображение
Рис. P.10. Создание страницы для элемента управления ComboBox

На странице ComboBoxPage.xaml добавляем пространство имен класса SilverlightControls:

xmlns:local="clr-namespace:SilverlightControls"

и в сетку страницы сам элемент управления ComboBox:

<local:ComboBoxControl 
    VerticalAlignment="Top" 
    HorizontalAlignment="Center"/>

После компиляции проекта мы увидим ниспадающий список автомобилей с их изображениями:

Внешний вид пользовательского элемента управления ComboBox

увеличить изображение
Рис. P.11. Внешний вид пользовательского элемента управления ComboBox
< Лекция 7 || Дополнительный материал 1: 12345678910111213
Атанас Маринов
Атанас Маринов
Болгария
Pavel Pelevin
Pavel Pelevin
Украина, Одесса