活动介绍

深入探索Silverlight中的样式与行为

立即解锁
发布时间: 2025-08-13 03:16:05 阅读量: 9 订阅数: 36
### 深入探索Silverlight中的样式与行为 在Silverlight开发中,样式与行为是提升用户界面交互性和可维护性的重要工具。下面将详细介绍如何在Silverlight中使用动作、触发器,并创建自定义行为。 #### 动作与触发器的连接 要使用动作,需要借助触发器。所有触发器都派生自`TriggerBase`,`System.Windows.Interactivity.dll`程序集中包含一个名为`EventTrigger`的触发器,它在特定事件发生时触发。 以下是将动作连接到元素的步骤: 1. **创建Silverlight项目**:首先创建一个新的Silverlight项目。 2. **添加引用**:添加对定义`PlaySoundAction`类的类库和`System.Windows.Interactivity.dll`程序集的引用。 3. **映射命名空间**:在XAML中映射相关命名空间,示例如下: ```xml <UserControl xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:custom="clr-namespace:CustomBehaviorsLibrary;assembly=CustomBehaviorsLibrary" ... > ``` 4. **添加触发器**:使用`Interaction.Triggers`集合为元素添加触发器,例如为按钮添加事件触发器: ```xml <Button Content="Click to Play Sound"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> </i:EventTrigger> </i:Interaction.Triggers> </Button> ``` 5. **添加行为**:将行为添加到`EventTrigger.Actions`集合中,示例如下: ```xml <Button Content="Click to Play Sound"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <custom:PlaySoundAction Source="test.mp3" /> </i:EventTrigger> </i:Interaction.Triggers> </Button> ``` #### Expression Blend中的设计时行为支持 在Expression Blend中,使用行为是一种拖放和配置的操作。具体步骤如下: 1. **确保引用**:确保应用程序引用了包含所需行为的程序集和`System.Windows.Interactivity.dll`程序集。 2. **查看行为**:在设计界面绘制一个按钮,点击资产库按钮,然后点击“行为”选项卡,即可查看可用的行为。 3. **添加动作**:从资产库中将动作拖放到控件上,Expression Blend会自动为元素创建触发器并在其中创建动作。 4. **配置对象**:在“对象和时间线”窗格中选择动作,然后在“属性”窗口中调整选项。 默认情况下,当为按钮添加新动作时,Expression Blend会为`Click`事件创建`EventTrigger`。可以通过在动作类中添加`DefaultTrigger`属性来指定默认使用的触发器,示例如下: ```vb <DefaultTrigger(GetType(UIElement), _ GetType(EventTrigger), New Object() {"MouseLeftButtonDown"})> _ Public Class PlaySoundAction Inherits TriggerAction(Of FrameworkElement) ... End Class ``` #### 创建目标触发器 许多动作需要对另一个元素执行操作,此时可以从`TargetedTriggerAction`派生动作类。`TargetedTriggerAction`提供了`Target`属性,应用程序开发人员可以设置该属性,触发器代码可以检查该属性并对目标元素执行必要的操作。 以下是两个派生自`TargetedTriggerAction`的动作示例: - **FadeOutAction**:对目标元素的不透明度进行动画处理,使其逐渐变为0。 ```vb Public Class FadeOutAction Inherits TargetedTriggerAction(Of UIElement) ' The default fade out time is 2 seconds. Public Shared ReadOnly DurationProperty As DependencyProperty = _ DependencyProperty.Register("Duration", GetType(TimeSpan), _ GetType(FadeOutAction), New PropertyMetadata(TimeSpan.FromSeconds(2))) Public Property Duration() As TimeSpan Get Return CType(GetValue(FadeOutAction.DurationProperty), TimeSpan) End Get Set(ByVal value As TimeSpan) SetValue(FadeOutAction.DurationProperty, value) End Set End Property Private fadeStoryboard As New Storyboard() Private fadeAnimation As New DoubleAnimation() Public Sub New() fadeStoryboard.Children.Add(fadeAnimation) End Sub Protected Overrides Sub Invoke(ByVal args As Object) ' Make sure the storyboard isn't already running. fadeStoryboard.Stop() ' Set up the storyboard. Storyboard.SetTarget(fadeAnimation, Me.Target) Storyboard.SetTargetProperty(fadeAnimation, New PropertyPath("Opacity")) ' Set up the animation. ' It's important to do this at the last possible instant, ' in case the value for the Duration property changes. fadeAnimation.To = 0 fadeAnimation.Duration = Duration fadeStoryboard.Begin() End Sub End Class ``` - **FadeInAction**:对目标元素的不透明度进行动画处理,使其逐渐变为1。 ```vb Public Class FadeInAction Inherits TargetedTriggerAction(Of UIElement) ' The default fade in is 0.5 seconds. Public Shared ReadOnly DurationProperty As DependencyProperty = _ DependencyProperty.Register("Duration", GetType(TimeSpan), _ GetType(FadeInAction), New PropertyMetadata(TimeSpan.FromSeconds(0.5))) Public Property Duration() As TimeSpan Get Return CType(GetValue(FadeInAction.DurationProperty), TimeSpan) End Get Set(ByVal value As TimeSpan) SetValue(FadeInAction.DurationProperty, value) End Set End Property Private fadeStoryboard As New Storyboard() Private fadeAnimation As New DoubleAnimation() Public Sub New ```
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

张诚01

知名公司技术专家
09级浙大计算机硕士,曾在多个知名公司担任技术专家和团队领导,有超过10年的前端和移动开发经验,主导过多个大型项目的开发和优化,精通React、Vue等主流前端框架。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
立即解锁

专栏目录

最新推荐

零信任架构的IoT应用:端到端安全认证技术详解

![零信任架构的IoT应用:端到端安全认证技术详解](https://img-blog.csdnimg.cn/20210321210025683.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMzI4MjI4,size_16,color_FFFFFF,t_70) # 摘要 随着物联网(IoT)设备的广泛应用,其安全问题逐渐成为研究的焦点。本文旨在探讨零信任架构下的IoT安全认证问题,首先概述零信任架构的基本概念及其对Io

【C#控件绑定技巧】:CheckBox与数据模型双向绑定,实现界面逻辑与数据同步

![控件绑定](https://learn.microsoft.com/en-us/visualstudio/xaml-tools/media/xaml-binding-failures-example-inline.png?view=vs-2022) # 摘要 C#控件绑定是构建动态用户界面和实现数据同步的关键技术,本文全面概述了控件绑定的基础知识、实践技巧和高级应用。文章首先介绍了控件绑定的基本概念、方法及其在不同数据模型下的实现。随后,通过CheckBox控件的绑定实践案例,深入探讨了单向与双向数据绑定的原理及应用,以及实际项目中的问题解决。文章进一步阐述了界面逻辑与数据同步的高级技巧

手机Modem协议在网络环境下的表现:分析与优化之道

![手机Modem协议开发快速上手.docx](https://img-blog.csdnimg.cn/0b64ecd8ef6b4f50a190aadb6e17f838.JPG?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATlVBQeiInOWTpQ==,size_20,color_FFFFFF,t_70,g_se,x_16) # 摘要 Modem协议在网络通信中扮演着至关重要的角色,它不仅定义了数据传输的基础结构,还涉及到信号调制、通信流程及错误检测与纠正机制。本文首先介

【多源数据整合王】:DayDreamInGIS_Geometry在不同GIS格式中的转换技巧,轻松转换

![【多源数据整合王】:DayDreamInGIS_Geometry在不同GIS格式中的转换技巧,轻松转换](https://community.esri.com/t5/image/serverpage/image-id/26124i748BE03C6A81111E?v=v2) # 摘要 本论文详细介绍了DayDreamInGIS_Geometry这一GIS数据处理工具,阐述了其核心功能以及与GIS数据格式转换相关的理论基础。通过分析不同的GIS数据格式,并提供详尽的转换技巧和实践应用案例,本文旨在指导用户高效地进行数据格式转换,并解决转换过程中遇到的问题。文中还探讨了转换过程中的高级技巧、

【心电信号情绪识别的实时处理:挑战与对策】:实时分析不再是难题

![【心电信号情绪识别的实时处理:挑战与对策】:实时分析不再是难题](https://www.ashokcharan.com/Marketing-Analytics/images/image312-23.png) # 摘要 随着情绪识别技术的发展,实时心电信号情绪识别在心理学与计算机科学领域变得越来越重要。本文综述了心电信号情绪识别的基本理论与实时技术应用,包括信号的采集、预处理、分析方法及实时处理技术。同时,本文也探讨了实时情绪识别系统架构设计和面对的技术挑战,并对未来跨学科的应用以及创新研究方向进行了展望。通过这些分析,本文为实时心电信号情绪识别技术的发展提供了全面的理论基础和技术支持,

物联网技术:共享电动车连接与控制的未来趋势

![物联网技术:共享电动车连接与控制的未来趋势](https://read.nxtbook.com/ieee/potentials/january_february_2020/assets/4cf66356268e356a72e7e1d0d1ae0d88.jpg) # 摘要 本文综述了物联网技术在共享电动车领域的应用,探讨了核心的物联网连接技术、控制技术、安全机制、网络架构设计以及实践案例。文章首先介绍了物联网技术及其在共享电动车中的应用概况,接着深入分析了物联网通信协议的选择、安全机制、网络架构设计。第三章围绕共享电动车的控制技术,讨论了智能控制系统原理、远程控制技术以及自动调度与充电管理

FPGA高精度波形生成:DDS技术的顶尖实践指南

![FPGA高精度波形生成:DDS技术的顶尖实践指南](https://d3i71xaburhd42.cloudfront.net/22eb917a14c76085a5ffb29fbc263dd49109b6e2/2-Figure1-1.png) # 摘要 本文深入探讨了现场可编程门阵列(FPGA)与直接数字合成(DDS)技术的集成与应用。首先,本文介绍了DDS的技术基础和理论框架,包括其核心组件及优化策略。随后,详细阐述了FPGA中DDS的设计实践,包括硬件架构、参数编程与控制以及性能测试与验证。文章进一步分析了实现高精度波形生成的技术挑战,并讨论了高频率分辨率与高动态范围波形的生成方法。

数字通信测试理论与实践:Agilent 8960综测仪的深度应用探索

# 摘要 本文介绍了数字通信的基础原理,详细阐述了Agilent 8960综测仪的功能及其在数字通信测试中的应用。通过探讨数字信号的测试理论与调制解调技术,以及综测仪的技术指标和应用案例,本文提供了数字通信测试环境搭建与配置的指导。此外,本文深入分析了GSM/EDGE、LTE以及5G信号测试的实践案例,并探讨了Agilent 8960综测仪在高级应用技巧、故障诊断、性能优化以及设备维护与升级方面的重要作用。通过这些讨论,本文旨在帮助读者深入理解数字通信测试的实际操作流程,并掌握综测仪的使用技巧,为通信测试人员提供实用的参考和指导。 # 关键字 数字通信;Agilent 8960综测仪;调制解

虚拟助理引领智能服务:酒店行业的未来篇章

![虚拟助理引领智能服务:酒店行业的未来篇章](https://images.squarespace-cdn.com/content/v1/5936700d59cc68f898564990/1497444125228-M6OT9CELKKA9TKV7SU1H/image-asset.png) # 摘要 随着人工智能技术的发展,智能服务在酒店行业迅速崛起,其中虚拟助理技术在改善客户体验、优化运营效率等方面起到了关键作用。本文系统地阐述了虚拟助理的定义、功能、工作原理及其对酒店行业的影响。通过分析实践案例,探讨了虚拟助理在酒店行业的应用,包括智能客服、客房服务智能化和后勤管理自动化等方面。同时,

【仿真模型数字化转换】:从模拟到数字的精准与效率提升

![【仿真模型数字化转换】:从模拟到数字的精准与效率提升](https://img-blog.csdnimg.cn/42826d38e43b44bc906b69e92fa19d1b.png) # 摘要 本文全面介绍了仿真模型数字化转换的关键概念、理论基础、技术框架及其在实践中的应用流程。通过对数字化转换过程中的基本理论、关键技术、工具和平台的深入探讨,文章进一步阐述了在工程和科学研究领域中仿真模型的应用案例。此外,文中还提出了数字化转换过程中的性能优化策略,包括性能评估方法和优化策略与方法,并讨论了数字化转换面临的挑战、未来发展趋势和对行业的长远意义。本文旨在为专业人士提供一份关于仿真模型数