`
Virgo_S
  • 浏览: 1151060 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Silverlight Make Into Control

    博客分类:
  • .NET
阅读更多
本文主要介绍了Expression Blend 3的新功能-Make Into Control。
    简介
 前不久,微软又推出其"Flash杀手"的又一个新版本Silverlight 3。值得注意的是,不仅Silverlight 3中新增添了不少功能,而且Expression Blend 3较之于其前的版本也大大加强,一个又一个极酷的支持加入到其中。
 由于目前的Silverlihgt尚处于快速发展阶段,而且目前Visual Studio还没有提供对于XAML标记语言的可视化支持,所以,Expression Blend的可视化编程支持几乎是我们必须掌握的。
 在本文中,我仅想介绍Expression Blend 3的一个新增功能-Make Into Control。借助于这项支持,你可以随心所欲绘制任何几何图形,然后把它转换成一个按钮,滑动条或者是一个下拉列表框控件。如果你也是的新手,那么本文也许正是你需要掌握的技巧之一。
 【注意】本文操作试验的前提是,你必须事先安装Silverlight 3 Tools for Visual Studio SP1以及Microsoft Expression Blend 3(当然也可以使用试用版本)。
 案例分析
 首先,请启动Visual Studio 2008。然后,选择"文件"-"新建"-"项目"。在随后的"新建项目"对话框中,选择"Silverlight Application"模板,并命名项目名称为S3MakeIntoControl。请参考图1。


 单击"确定"按钮,随后出现一个对话框,意思是选择Silverlight工程的宿主站点。请选择默认设置。
 然后,导航到Silverlight工程,在文件MainPage.xaml上单击右键并选择"Open in Expression Blend..."。
 于是,系统自动打开另一个软件Microsoft Expression Blend 3,并且在你面前呈现一个空的XAML页面。
 注意到,在此页面的左边是Expression Blend程序的工具栏。请选择其中的Pencil图标(请参考图2)。


图2  从Expression Blend工具栏中选择铅笔图标
 现在,你可以在MainPage.xaml页面中进行任意绘制。本例中,我绘制了一个丑陋的五角星形状。然后,选择上面的五角星形状,就可以把它转换成一个Silverlight控件。
 选择五角星形状后,在其上单击右键并选择"Make Into Control"选项(请参考图3)。


图3  选择五角星后击右键选择"Make Into Control"选项

 随后弹出一个确定要转换成指定控件的对话框(请参考图4)


图4  确定控件类型对话框

 为了简化起见,在上图对话框中选择"Button"控件类型,并输入键名为pentagonButton,最后单击"OK"按钮退出对话框。现在,我们便有了一个Button控件了。感觉如何?
不忙,让我们继续进行一番修改。右单击刚刚创建的pentagonButton按钮,从随后的弹出菜单中选择"Edit Template"-"Edit Current",如图5所示。


图5  选择编辑新创建控件的模板

 经上面的操作后,我们便可以通过States窗口(作为一个选项卡,与"Projects"靠在一起)来访问VisualStateManager了。
 现在,单击"States"选项卡,然后在其中单击MouseOver状态。这将触发MouseOver事件的状态录制动作,如图6所示。


图6  触发新建控件的MouseOver事件的状态录制动作

 此时,打开右边的"Properties"(属性)选项卡,设置按钮控件的填充色为另一个颜色,如图7所示。


图7  在新建控件的MouseOver事件录制状态填充新的颜色

 现在,停止录制操作,保存刚才的工作(File-Save)。

 此时转到xaml文件的标记状态下观察,你会发现有如下内容:
<UserControl.Resources>
 <Style x:Key="pentagonButton" TargetType="Button">
 <Setter Property="Template">
 <Setter.Value>
 <ControlTemplate TargetType="Button">
 <Grid>
 <VisualStateManager.VisualStateGroups>
 <VisualStateGroup x:Name="FocusStates">
 <VisualState x:Name="Focused"/>
 <VisualState x:Name="Unfocused"/>
 </VisualStateGroup>
 <VisualStateGroup x:Name="CommonStates">
 <VisualState x:Name="Normal"/>
 <VisualState x:Name="MouseOver">
 <Storyboard>
 <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="path" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)">
 <EasingColorKeyFrame KeyTime="00:00:00" Value="#FFF200FF"/>
 </ColorAnimationUsingKeyFrames>
 </Storyboard>
 </VisualState>
 <VisualState x:Name="Pressed"/>
 <VisualState x:Name="Disabled"/>
 </VisualStateGroup>
 </VisualStateManager.VisualStateGroups>
 <Path x:Name="path" Stretch="Fill" Stroke="Black" UseLayoutRounding="False" Data="M73.611115,181.94444 C86.962151,170.29263 84.722221,180.84279 84.722221,154.16667 C84.722221,138.78079 86.111115,123.42919 86.111115,108.33334 C86.111115,86.345619 87.5,65.706612 87.5,44.444443 C110.16323,44.444443 126.76094,82.515137 130.55556,116.66666 C133.69991,144.96585 144.44444,166.29266 144.44444,197.22223 C121.78442,197.22223 102.99593,172.35312 81.944443,159.72223 C67.342331,150.96095 59.193172,141.79919 55.555557,123.61111 C54.629631,123.61111 53.703705,123.61111 52.777779,123.61111 C54.022728,116.14142 155.51205,39.511379 137.5,105.55556 C127.33724,142.81902 121.06282,167.95105 77.777779,183.33333">
 <Path.Fill>
 <RadialGradientBrush GradientOrigin="0.577,0.504">
 <GradientStop Color="Black" Offset="0"/>
 <GradientStop Color="#FF01FF01" Offset="1"/>
 </RadialGradientBrush>
 </Path.Fill>
 </Path>
 <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
 </Grid>
 </ControlTemplate>
 </Setter.Value>
 </Setter>
 </Style>
 </UserControl.Resources>
 <Grid x:Name="LayoutRoot">
 <Button Height="153.778" HorizontalAlignment="Left" Margin="52.778,44.444,0,0" Style="{StaticResource pentagonButton}" VerticalAlignment="Top" Width="92.666" Click="Button_Click"/>

为了观察试验效果明显起见,在页面MainPage.xaml的下部添加一个TextBlock控件,并命名为txtMessage。
 接下来,我们想转入到新创建的pentagonButton按钮控件的Click事件处理器函数中。为此,只需要双击如图8所示的事件名Click的右侧。


图8  待触发pentagonButton按钮控件的Click事件处理器

 Blend即打开了后台代码编辑页面MainPage.xaml.cs。这种代码编辑功能也是Blend 3.0新增添的,而且支持语法智能感知提示,相当不错。在Click事件处理器函数代码中如下内容:
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
 {
 txbMessage.Text="Hello world!";
 }


现在,请导航回到Visual Studio中,系统会提示你重新加载刚才的XAML文件。
 最后,请选择"生成"-"重新生成解决方案"。生成完毕后,在宿主Web工程的S3MakeIntoControlTestPage.aspx文件上单击右键并选择"在浏览器中查看"。
 现在,你可以欣赏上面的杰作了-你会观察到如图9所示的界面。


图9  应用示例初始界面

 此时,移动你手中的鼠标到五角星上(不要移动内部的白色部分),按钮的颜色将变成前面设置的另一种形式(我们使用了渐变色)。而当单击此按钮时,下面的提示行中也显示提示信息"Hello world!"(见图10)。


图10  单击五角星按钮出现相应的信息提示

 小结

 Expression Blend 3这个新版本中的确增添了不少强大的功能,本文介绍的仅是"冰山一角"。如今,借助于本文介绍的这个Make Into Control特征,你可以轻松实现把自己喜欢的形状转换成一个定制控件。这项功能极有趣也非常实用。
  • 大小: 36.8 KB
  • 大小: 4.9 KB
  • 大小: 18.4 KB
  • 大小: 31.1 KB
  • 大小: 26.1 KB
  • 大小: 32.9 KB
  • 大小: 5.5 KB
  • 大小: 17.3 KB
  • 大小: 25.6 KB
  • 大小: 25.5 KB
分享到:
评论

相关推荐

    Silverlight 2 Control Sample Source Code and Apps

    Silverlight 2 Control Sample Source Code and Apps,Silverlight 2 Control Sample Source Code and Apps

    WPF/Silverlight UserControl继承示例

    演示如何在WPF和Silverlight中实现UserControl的继承。 在实际工程项目中,XAML程序并不推荐使用继承的方式实现控件,并且由于设计层和逻辑层的分离,导致直接继承UserControl子类并不容易,需要在理解UserControl...

    Silverlight DataPager扩展实例

    **Silverlight DataPager扩展实例详解** Silverlight是微软推出的一款强大的富互联网应用程序(RIA)开发框架,它提供了丰富的用户界面和交互体验。在处理大量数据时,DataPager控件是Silverlight中的一个重要组件...

    Pop Search Form Control in Silverlight

    **银光(Silverlight)中的弹出式搜索表单控件** 在开发Web应用程序时,交互性和用户体验是至关重要的因素。Silverlight作为一种强大的富互联网应用(RIA)开发平台,为创建动态、高度交互的UI提供了丰富的工具和...

    silverlight 5下载全

    **Silverlight 5 下载全指南** Silverlight是一款由微软开发的富互联网应用程序(RIA)平台,主要用于在Web浏览器中创建和展示多媒体内容和交互式用户界面。Silverlight 5是该技术的一个重要版本,提供了许多增强...

    Silverlight学习源代码

    多个Silverlight学习源代码:silverlight toolkit中的主题(theme)应用、SilverLight 桌面文件夹效果源码、Silverlight4.0 Demo 源码、Silverlight5 beta新特性源码、SilverlightDataGrid、SilverlightMVVM模式...

    silverlight视频聊天Demo

    **Silverlight视频聊天Demo详解** Silverlight是一种由微软开发的富互联网应用程序(RIA)平台,主要用于构建具有丰富视觉效果和交互体验的Web应用。在本文中,我们将深入探讨基于Silverlight技术实现的视频聊天...

    SilverLight入门系列教程-1

    &lt;UserControl x:Class="HelloSilverlight.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&gt; , SilverLight!" ...

    silverlight

    Silverlight是微软推出的一种强大的富互联网应用程序(RIA)平台,主要用于构建和展示具有丰富图形、交互性和媒体体验的Web应用。这个"一步一步学Silverlight 2系列"的学习资源旨在帮助初学者逐步掌握Silverlight 2...

    Silverlight2.0实例-〖Silverlight Klotski〗

    《Silverlight 2.0 实例:探索Silverlight Klotski》 Silverlight,作为微软推出的一款强大的富互联网应用程序框架,曾经在Web开发领域占据重要地位。尤其在Silverlight 2.0版本发布时,它引入了大量新特性和改进,...

    silverlight仿ipad效果

    在本文中,我们将深入探讨如何使用Silverlight技术来创建一个模仿iPad主屏幕效果的应用程序。Silverlight,由Microsoft开发,是一种强大的RIA(Rich Internet Application)框架,它允许开发者构建具有丰富交互性和...

    Silverlight如何与JS相互调用

    &lt;object id="silverlightControl" data="data:application/x-silverlight-2," type="application/x-silverlight-2"&gt; ``` 在JavaScript中,你可以这样调用Silverlight对象的方法: ```javascript function ...

    ComponentOne Studio for Silverlight 2013 v1 2/3

    With 40+ chart types, flexible data binding, run-time interaction, optimization for large data sets, and so much more, Chart for Silverlight is the most advanced charting control on the market....

    ComponentOne Studio for Silverlight 2012 v3 1/3

    With 40+ chart types, flexible data binding, run-time interaction, optimization for large data sets, and so much more, Chart for Silverlight is the most advanced charting control on the market....

    silverlight5_sdk

    silverlight5_sdk 安装包

Global site tag (gtag.js) - Google Analytics