扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
图1.在该演示工程中的过滤效果 |
1. CCBlurredLabel 2. CCDropShadow 3. CCEmboss 4. CCEngrave 5. CCGlowingText 6. CCGradient 7. CCPageTransition_Iris 8. CCPageTransition_Pixelate 9. CCPageTransition_RadialWipe 10. CCPageTransition_GradientWipe 11. CCPageTransition_Wheel |
图2:像素化页面过渡效果 |
另外,这并不是一组十分复杂的控件,但是我认为它们已经足已能够展示通过DirectX能够取得什么样的过滤效果。你可以参考网站上的有关微软文档来探讨其它过滤效果。 三、文本增强过滤效果控件
包含在示例控件库中的上面6个文本改进效果控件中的每一个基本上都是以相同的格式创建。在此,我们不想逐个描述这些控件,而只描述一下CCEmboss控件。该CCEmboss控件继承自System.Web.UI.WebControl;我已经把对System.Design的引用添加到基本web控件上,并且添加了一个import语句以便在工程中包括System.Web.UI.Design库。这种添加对于建立一些设计时刻支持元素(以便使该控件在设计时刻更易于使用)是必要的。该代码被分为三个独立的区域:Declarations,Properties和Rendering。下面,让我们看一下该类定义的开始:
Imports System Imports System.Collections.Generic Imports System.ComponentModel Imports System.Text Imports System.Web Imports System.Web.UI Imports System.Web.UI.Design Imports System.Web.UI.WebControls <Designer(GetType(EmbossedLabelDesigner))>_ <ParseChildren(False)>_ Public Class CCEmboss Inherits WebControl |
#Region "Declarations" Private mEnabled As Boolean Private mBias As Single #End Region |
#Region "Properties" <Category("Embossed Label")>_ <Browsable(True)>_ <Description("Enable or display the embossed effect.")>_ Public Property EmbossEnabled() As Boolean Get EnsureChildControls() Return mEnabled End Get Set(ByVal value As Boolean) EnsureChildControls() mEnabled = value End Set End Property <Category("Embossed Label")>_ <Browsable(True)>_ <Description("Set the bias for the embossed effect (typically 0.7).")>_ Public Property Bias() As Single Get EnsureChildControls() Return mBias End Get Set(ByVal value As Single) EnsureChildControls() mBias = value End Set End Property #End Region |
#Region "Rendering" Protected Overrides Sub AddAttributesToRender(ByVal writer As HtmlTextWriter) writer.AddStyleAttribute(HtmlTextWriterStyle.Filter, _ "progid:DXImageTransform.Microsoft.Emboss(bias=" & Bias.ToString() & _ ",enabled = " & EmbossEnabled.ToString() & ");width:" & Width.Value.ToString() & "px") MyBase.AddAttributesToRender(writer) End Sub #End Region End Class |
Public Class EmbossedLabelDesigner Inherits ContainerControlDesigner Protected Overrides Sub AddDesignTimeCssAttributes(ByVal styleAttributes As System.Collections.IDictionary) Dim embossLbl As CCEmboss = CType(Me.Component, CCEmboss) styleAttributes.Add("filter","progid:DXImageTransform.Microsoft.Emboss(bias=" & embossLbl.Bias.ToString() & ",enabled = " & embossLbl.Enabled.ToString() & ");width:" & embossLbl.Width.Value.ToString() & "px") MyBase.AddDesignTimeCssAttributes(styleAttributes) End Sub End Class |
四、页面过渡效果控件
这一节,象前一节一样,我们将仅讨论5个页面过渡效果控件之一(因为它们之间具有极大的相似性)。我将讨论渐变擦除过渡效果控件;请参考本文提供的示例代码来进一步了解这个控件与其它控件之间的区别。
该渐变擦除页面过渡控件(CCPageTransitition_GradientWipe)以一种与文本改进控件相似的方式开始。实现代码被划分成三个主要的区域:Declarations,Properties和Rendering。
该类声明部分看起来如下所示:
Imports System Imports System.Collections.Generic Imports System.ComponentModel Imports System.Text Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls ''' <summary> ''' 过渡效果(仅适用于Internet Explorer) '''把这个控件拖动到一个页面上;当这个页面被退出时,下一个页面将会通过过渡 '''效果(Gradient Wipe)进行显示 ''' </summary> ''' <remarks></remarks> Public Class CCPageTransitition_GradientWipe Inherits WebControl Private Sub CCPageTransitition_GradientWipe_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init Me.Width = 20 Me.Height = 20 End Sub |
你会注意到,我们没有把System.Web.UI.Design导入到这个类中,因为对于这个控件来说,不存在可能的设计时刻可视化内容。你可能还注意到,该控件的初始化用来把该控件的高度和宽度设置为各自20个像素。这仅在设计时刻在页面的表单(一个空框)上创建一些指示时才需要。这个框在运行时刻不会出现在web表单上。
在类初始化之后,我添加了下面的Declarations区域。这个区域用于存储该类中的每一个private型成员变量。这个区域的声明看起来如下所示:
#Region "Declarations" Private mDuration As Single = 1 #End Region |
你可以看出,该类中只使用了一个私有成员变量。在Declarations区域后面,跟着的是Properties区域;它看上去如下所示:
#Region "Properties" <Category("Gradient Wipe Transition")> _ <Browsable(True)> _ <Description("Set the effect duration (typically 1 or 2)")> _ Public Property TransitionDuration() As Single Get Return mDuration End Get Set(ByVal value As Single) mDuration = value End Set End Property #End Region |
这个属性用于设置发生页面过渡效果的时间长度。下面,我们来看一下生成(redering)区域块的代码:
#Region "Rendering" Protected Overrides Sub RenderContents(ByVal writer As System.Web.UI.HtmlTextWriter) Try Dim sb As New StringBuilder sb.Append("<meta http-equiv='Page-Exit' ") sb.Append("content='progid:DXImageTransform. _ Microsoft.gradientWipe(duration=" & TransitionDuration.ToString() & ")' />") writer.RenderBeginTag(HtmlTextWriterTag.Div) writer.Write(sb.ToString()) writer.RenderEndTag() Catch ex As Exception writer.RenderBeginTag(HtmlTextWriterTag.Div) writer.Write("Gradient Wipe Transition Control") writer.RenderEndTag() End Try End Sub #End Region End Class |
这部分代码相当直接,RenderContents子例程被重载,新的内容被包括到一个try-catch块内。尽管我没有处理任何错误(在出现错误的情况下),我只把字符串"Gradient Wipe Transition Control"写到一个div中,作为一个可放置于此的控件的占位符。
在该try块内的代码仅使用一个字符串构建器来格式化我们想在运行时刻直接放到该web页面的源中的文本。该字符串构造器中包含的代码用于建立请求,从而把页面exit事件与页面过滤效果加以关联。你可能还注意到,duration属性被传递到字符串构造器用于设置过滤器使用的duration参数的值。
在配置该字符串构造器之后,该字符串构造器的内容被写到页面上。无论何时该示例类库中的这个或任何其它页面过渡控件被添加到一个页面,页面退出显示出同样的属性;结果是,无论何时用户离开该页面,下一个页面都将使用该过渡效果显示。
五、 结论
就此结束吧!其实,我还建议你研究一下其它的控件并逐个在测试网站中进行试验。还存在其它一些过滤效果和页面过渡可用,我想你一定希望进一步扩展这个库;同样,还有其它一些有关过滤的属性需要进一步讨论。最后,祝你编程愉快!
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者