演练:创建您的第一个 Silverlight 应用程序

演练:创建您的第一个 Silverlight 应用程序

 

Silverlight

本演练演示如何通过创建简单的应用程序使用 Silverlight 和 Visual Studio 开始编程。本演练演示以下概念。

 

使用 GridStackPanel 控件创建动态布局。

 

添加核心控件和 Silverlight SDK 控件。

 

添加事件处理程序。

 

添加代码逻辑。

 

若要查看此应用程序的运行示例,请单击下面的链接。

运行此示例


先决条件



您需要以下组件来完成本演练:

 

Visual Studio 2010.

 

用于 Visual Studio 2010 的 Silverlight 4 Tools.

 

可以从 Silverlight 下载站点下载所有 Silverlight 软件。


创建 Silverlight 项目



第一步是创建一个 Silverlight 项目。


创建 Silverlight 项目

使用 Visual Basic 或 Visual C# 新建一个名为 HelloSilverlight 的 Silverlight 应用程序项目。清除"在新网站中承载 Silverlight 应用程序"复选框。有关更多信息,请参见如何创建新 Silverlight 项目

 

打开解决方案资源浏览器,可以看到有两个文件:App.xaml 和 MainPage.xaml。

App.xaml 允许您指定应用于整个应用程序的资源和代码。MainPage.xaml 定义一个页面,该页面与网站中的页面类似。

 

在解决方案资源浏览器中展开 MainPage.xaml 节点。

MainPage.xaml.vb 或 MainPage.xaml.cs 是您编写托管代码的代码隐藏文件。此模型与 ASP.NET 中使用的模型类似。

 

如果 MainPage.xaml 尚未打开,请在解决方案资源浏览器中双击它。

在 Visual Studio 的中心,您应该看到一个白色的矩形区域。此区域称为“设计”视图。您可以从工具箱拖动控件并且定位元素以便创建您的布局。

在“设计”视图下是 XAML 视图。可以在 XAML 视图中添加 XAML 来创建布局。在对 XAML 视图进行更改时,“设计”视图将自动更新。为了帮助您在 XAML 视图中工作,将显示 IntelliSense 并且会出现波浪线以指示错误。有关设计器功能的更多信息,请参见 用于 Visual Studio 2010 的 Silverlight 设计器

用 Visual Studio 2008 编写的新 Silverlight 项目
定义网格布局



默认情况下,Silverlight 项目包含一个 GridGrid 允许您创建一个与 HTML 中的表类似的表类型布局。本节介绍如何创建 Grid 布局。在后面的章节中,您将学会如何使布局具有动态效果。


定义网格布局

在 XAML 视图中找到 Grid 元素。

 

Grid 开始标记中,通过使用其他颜色替换“White”来更改 Background 颜色。

键入时,您应看到一个 IntelliSense 窗口,其中包含一个可供选择的颜色列表。在您指定某一颜色后,“设计”视图将用新颜色更新。

XAML 视图中的 IntelliSense 窗口

Grid 开始标记中,添加 ShowGridLines 属性,并将它设置为 True,如下面的 XAML 所示。



复制

<Grid x:Name="LayoutRoot" Background="Beige" ShowGridLines="True">

 

此属性指定添加线条以标识 Grid 中的行和列。创建 Grid 布局时,这是很有用的调试功能。

 

Grid 元素内添加以下 XAML 来定义三行和两列。

<Grid x:Name="LayoutRoot" Background="Beige" ShowGridLines="True">
    <Grid.RowDefinitions>
        <RowDefinition Height="40"/>
        <RowDefinition Height="220"/>
        <RowDefinition Height="40"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="75" />
        <ColumnDefinition Width="325"/>
    </Grid.ColumnDefinitions>
</Grid>

 

在“设计”视图中,您看到标识行和列的线条出现。

 

按 F5 或单击"开始调试"工具栏按钮运行应用程序。

您的浏览器将打开并且将看到指示您定义的 Grid 的虚线,如下图中所示。

浏览器中的网格布局

关闭浏览器返回到 Visual Studio。


添加控件



Silverlight 包含多个控件,可帮助您显示数据和获取用户输入。本节介绍如何向 Grid 布局中添加 TextBlockTextBoxStackPanelCalendarButton 控件。


添加控件

如果还没有打开“工具箱”窗口,请打开它。

工具箱中的 Silverlight XAML 控件

从工具箱将 TextBlock 控件拖到 XAML 视图中的 </Grid.ColumnDefinitions> 结束标记之后。

<TextBlock /> 标记添加到 XAML 视图中。

 

TextBlock 开始标记中添加以下 Text 属性。



复制

<TextBlock Text="Name:"></TextBlock>

 

在 Name TextBlock 后添加另一个带有 Text="Date:" 的 TextBlock

 

在 Date TextBlock 后添加另一个带有 Text="Message:" 的 TextBlock

在“设计”视图中,您可以看到 TextBlock 元素在第一个单元格中彼此重叠。若要在 Grid 单元格中定位 TextBlock 元素,必须指定 Grid.RowGrid.Column 属性。

 

在 Name TextBlock 的开始标记中添加以下属性。

Grid.Row="0" Grid.Column="0"

 

请注意,这些属性命名为 Grid.RowGrid.Column,而不仅仅是 Row 和 Column。Grid 具有 Row 和 Column 属性,而 TextBlock 却没有。但您可以将 Grid 中的 Row 和 Column 属性“附加”到 TextBlockGrid.RowGrid.Column 是称为附加属性的特殊属性。附加属性是一个将在 XAML 中使用的概念。有关更多信息,请参见附加属性概述

 

在 Date TextBlock 的开始标记中添加以下属性。


Grid.Row="1" Grid.Column="0"

 

在 Message TextBlock 的开始标记中添加以下属性。

Grid.Row="2" Grid.Column="0"

 

将以下 ColumnSpan 附加属性添加到 Message TextBlock 以允许文本跨越两列。

Grid.ColumnSpan="2"

 

在“设计”视图中,TextBlock 元素现在位于相应的单元格中。

 

从工具箱将 TextBox 控件拖到 XAML 视图中的消息 TextBlock 之后。

 

在开始标记中,设置以下属性。

 

<TextBox Text="Your Name" Grid.Row="0" Grid.Column="1"></TextBox>

 

请注意,TextBox 填满整个 Grid 单元格。由于默认情况下 HorizontalAlignmentVerticalAlignment 属性设置为 Stretch,因此它填满该单元格。

添加到 Silverlight 布局的控件

TextBox 的开始标记中,将 Width 属性设置为 150。


Width="150"

 

请注意,TextBoxGrid 单元格中居中。

 

TextBox 的开始标记中,通过添加以下 HorizontalAlignment 属性将对齐方式设置为左对齐。


HorizontalAlignment="Left"

 

在 Your Name TextBox 下方,从工具箱将一个 StackPanel 控件拖动到 XAML 视图。

StackPanel 是一个用于垂直或水平堆叠元素的有用控件。在 Your Name TextBox 下方的 Grid 单元格中,将垂直堆叠两个控件。

 

StackPanel 的开始标记中添加以下属性。


<StackPanel Grid.Column="1" Grid.Row="1" Orientation="Vertical">

</StackPanel>

 

从工具箱将 Calendar 控件拖动到 XAML 视图中的 StackPanel 元素内。

添加 Calendar 控件时,您会注意到标记名与其他控件稍有不同。它以“sdk:”为前缀。Calendar 控件不是核心 Silverlight 控件的一部分,并且是在另一程序集中实现的。Calendar 控件是 Silverlight SDK 的一部分。若要使用 Silverlight SDK 控件,必须添加 XML 命名空间和对该程序集的引用。当您将 Silverlight SDK 控件拖到 XAML 视图或“设计”视图时,会自动将一个 XML 命名空间添加到 MainPage.xaml 文件顶部的 <UserControl> 标记中。正如在下面的标记中所看到的那样,sdk 命名空间使用如 Silverlight 库的前缀和映射中所述的特定 URI。


<UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"

 

有关 Silverlight SDK 以及 Silverlight SDK 中的控件的更多信息,请参见Silverlight Tools按功能分类的控件

 

Calendar 的开始标记中设置以下属性。

SelectionMode 设置为 SingleDate 表示仅允许选择一个日期。

请注意,应使用 sdk: 前缀将日历元素与在上一步中声明的 SDK 命名空间关联。


<sdk:Calendar SelectionMode="SingleDate" HorizontalAlignment="Left"></sdk:Calendar>

 

从工具箱将 Button 控件拖动到 Calendar 控件之后,但在 XAML 视图中的 StackPanel 元素内。

由于 StackPanelOrientation 属性设置为 Vertical,因此 Button 将显示在 Calendar 之下。

 

Button 的开始标记中,设置 WidthHeightHorizontalAlignmentContent 属性。


<Button Width="75" Height="25" HorizontalAlignment="Left" Content="OK"></Button>

 

Button 控件不具有 Text 属性,但它具有 Content 属性。由于实际上可以添加其他元素(如图像或其他控件)作为 Button 的内容,因此 Button 具有 Content 属性。

 

在"文件"菜单上单击"全部保存"。

此时,所有控件均已添加。您的 XAML 应与下面的代码类似。

<UserControl
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
    x:Class="HelloSilverlight.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="300">
    <Grid x:Name="LayoutRoot" Background="Beige" ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition Height="40"/>
            <RowDefinition Height="220"/>
            <RowDefinition Height="40"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="75" />
            <ColumnDefinition Width="325"/>
        </Grid.ColumnDefinitions>
        <TextBlock Text="Name:" Grid.Row="0" Grid.Column="0"></TextBlock>
        <TextBlock Text="Date:" Grid.Row="1" Grid.Column="0"></TextBlock>
        <TextBlock Text="Message:" Grid.Row="2" Grid.Column="0"
            Grid.ColumnSpan="2"></TextBlock>
        <TextBox Text="Your Name" Grid.Row="0" Grid.Column="1"
            Width="150" HorizontalAlignment="Left"></TextBox>
        <StackPanel Grid.Column="1" Grid.Row="1" Orientation="Vertical">
            <sdk:Calendar SelectionMode="SingleDate"
                HorizontalAlignment="Left"></sdk:Calendar>
            <Button Width="75" Height="25"
                HorizontalAlignment="Left" Content="OK"></Button>
        </StackPanel>
    </Grid>
</UserControl>


 

按 F5 或单击"开始调试"运行应用程序。

下图显示浏览器窗口的一个示例。可以在 TextBox 中键入文本,并且可以在 Calendar 中选择日期,但由于尚未添加代码,因此 Button 不执行任何操作。

浏览器中带有控件的网格布局
添加代码



通过代码隐藏文件可以向 XAML 中定义的元素添加逻辑。若要以编程方式访问控件和其他元素,必须命名元素。本节介绍如何在 XAML 中命名元素、添加事件处理程序以及在代码隐藏文件中添加逻辑。


添加代码

在 XAML 视图中找到 Message TextBlock

 

在 Message TextBlock 的开始标记中,添加以下 message1 Name 属性。


x:Name="message1"

 

x:Name 属性唯一地标识一个元素。有关更多信息,请参见 XAML 概述

 

以类似的方式将 TextBox 控件命名为 name1,将 Calendar 控件命名为 cal1,将 Button 控件命名为 okButton。


x:Name="name1"
x:Name="cal1"
x:Name="okButton"

 

在 OK Button 的开始标记中键入 Click,然后按 Tab。

应出现一个如下图所示的 IntelliSense 窗口。

适用于新事件处理程序的 IntelliSense

双击"<新建事件处理程序>"。

Click 事件处理程序的默认名称显示在 XAML 中 (Click="okButton_Click"),并且在代码隐藏文件中创建了一个事件处理程序。

 

右击 Click="okButton_Click",然后在快捷菜单中选择"定位到事件处理程序",如下图所示。

定位到"事件处理程序"快捷菜单

将打开 MainPage.xam.vb 或 MainPage.xaml.cs,并且光标定位在 okButton_Click 事件处理程序中。

 

将下面的代码添加到 okButton_Click 事件处理程序中。


 
VB
C#
C++
F#
JScript 

Private Sub okButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    Dim dateString As String
    If cal1.SelectedDate Is Nothing Then
        dateString = "<date not selected>"
    Else
        dateString = cal1.SelectedDate.ToString()
    End If
    message1.Text = "Hi " & name1.Text & vbCrLf & _
        "Selected Date: " & dateString
End Sub


 

按 F5 或单击"开始调试"运行应用程序。

 

在"姓名"框中键入您的姓名,在 Calendar 中选择一个日期,然后单击"确定"。

将显示您的姓名和选定的日期。下图显示浏览器窗口的一个示例。

浏览器中的控件和运行代码
使布局具有动态效果



当前布局是固定的。Silverlight 包括生成动态布局的多个选项。本节介绍使布局更具动态效果的技巧。


使布局具有动态效果

在 MainPage.xaml 的 Grid.RowDefinitions 元素中,将 Height 值更改为以下内容。


<RowDefinition Height="Auto"/>
<RowDefinition Height="*" MinHeight="220"/>
<RowDefinition Height="Auto"/>

Auto 大小调整表示大小由内容确定。Star 大小调整 (*) 表示大小是剩余空间的加权比例。

 

Grid.ColumnDefinitions 元素中,将 Width 值更改为以下内容。


<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*"/>

 

将以下 Margin 属性添加到 Name、Date 和 Message TextBlock 元素。

这表示在左侧和右侧添加 10 像素边距,在顶部和底部添加 5 像素边距。


Margin="10,5,10,5"

 

将以下 Margin 属性添加到 TextBoxCalendarButton


Margin="0,5,0,5"

 

将以下 FontSize 属性添加到 Message TextBlock 以增加字号。


FontSize="20"

 

在"文件"菜单上单击"全部保存"。

您的 XAML 应与下面的代码类似。
 
<!-- NOTE:
  By convention, the sdk prefix indicates a URI-based XAML namespace declaration
  for Silverlight SDK client libraries. This namespace declaration is valid for
  Silverlight 4 only. In Silverlight 3, you must use individual XAML namespace
  declarations for each CLR assembly and namespace combination outside the scope
  of the default Silverlight XAML namespace. For more information, see the help
  topic "Prefixes and Mappings for Silverlight Libraries".
-->
<UserControl
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
    x:Class="HelloSilverlight.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="300">
    <Grid x:Name="LayoutRoot" Background="Beige" ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*" MinHeight="220"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <TextBlock Text="Name:" Grid.Row="0" Grid.Column="0" Margin="10,5,10,5"></TextBlock>
        <TextBlock Text="Date:" Grid.Row="1" Grid.Column="0" Margin="10,5,10,5"></TextBlock>
        <TextBlock x:Name="message1" Text="Message:" Grid.Row="2" Grid.Column="0"
            Grid.ColumnSpan="2" Margin="10,5,10,5" FontSize="20"></TextBlock>
        <TextBox x:Name="name1" Text="Your Name" Grid.Row="0" Grid.Column="1"
            Width="150" HorizontalAlignment="Left" Margin="0,5,0,5"></TextBox>
        <StackPanel Grid.Column="1" Grid.Row="1" Orientation="Vertical">
            <sdk:Calendar x:Name="cal1" SelectionMode="SingleDate"
                HorizontalAlignment="Left" Margin="0,5,0,5"></sdk:Calendar>
            <Button Click="okButton_Click" x:Name="okButton" Width="75" Height="25"
                HorizontalAlignment="Left" Content="OK" Margin="0,5,0,5"></Button>
        </StackPanel>
    </Grid>
</UserControl>

 

按 F5 或单击"开始调试"运行应用程序。

 

调整浏览器窗口的大小并注意行为。

 

单击 OK Button

请注意,Grid 第三行的高度有所增加以容纳文本,如下图所示。

浏览器中的动态布局
请参见




概念
Silverlight 路线图
Silverlight 示例
Silverlight 布局系统
其他资源
XAML
控件

 

引自:http://msdn.microsoft.com/zh-cn/library/cc838218(v=vs.95).aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值