大家知道,Silverlight开发工具出现的的时间应该不短了。它正在不断的进行新版本的升级。那么在升级的过程中就会出现老版本与新版本之间的兼容性问题。在这里我们就会对Silverlight兼容进行一下分析。#t#
现在所有基于Silverlight 2.0开发的应用程序都会被强制升级到 silverlight 3.0插件 ,这个在程序开发过程中本不可避免,但在升级中却遇到了最让人头痛的问题,3.0中有些地方的改进并不能保证对2.0应用程序的完全兼容,这给基于商业应用的网站带来的无疑是一场灾难。
唉,贸然使用非开源的新技术确实是需要付出代价的。。本文就此列出所有从2.0 到 3.0 版本升级过程中会对旧版本造成影响的所有注意的地方,谨此提醒大家一句,不要贸然使用非开源的框架,否则你的程序并不控制在自己手里,听说XP里不是发现了很多Hacker 么。。
Silverlight兼容1. 自 Silverlight 2 以来的重大更改
1.1 System.Web.Silverlight.dll 已从 Silverlight SDK 中删除
1.2 Silverlight 应用程序现在响应浏览器缩放
1.3 弹出项 Tab 键更改
1.4 ComboBox 弹出项剪切已修复
1.5 在 PopupRenderTransform 更改后 Silverlight 始终重绘弹出项
1.6 ContentPresenter.Content = "string" 不再更改 ContentTemplate 属性
1.7 在使用空的 ContentTemplate 时,ContentControl 现在将忽略内容
1.8 设置 ContentControl.Content 不会导致不需要的 OnApplyTemplate 调用
1.9 在 ItemsSource 设置为具有 typeconverter 的枚举时,ComboBox 和 ContentControl 现在显示字符串,而非数字
1.10 没有所选项的 ComboBox 采用额外的击键来选择第二个项
1.11 HorizontalScrollBarVisibility 和 VerticalScrollBarVisibility 现在可以在 ComboBox 和 ListBox 的样式中设置
1.12 ListBoxItem.HorizontalContentAlignment 现在受到重视
1.13 ListBoxItem.Style 现在优先于 ListBox.ItemContainerStyle
1.14 在 ListBox 内使用 Tab 键定位现在将焦点移到下一个控件,而非下一个 ListBox 项
1.15 从 PasswordBox/TextBox 中删除了 TemplatePart 声明
1.16 TextBox 中的 TextAlignment 现在相对于文档而非 TextBox 工作
1.17 只读 TextBox 的默认颜色已更改
1.18 ENTER 键现在注重 Button.ClickMode,后者默认为 Release (KeyUp)
1.19 Slider 控件的命中测试区域现在与其可见部分匹配
1.20 clientaccesspolicy.xml 内的格式错误的 URL 现在导致该 URL 被忽略,而非文件的其余部分被忽略
1.21 错误修复:更改 Opacity 没有始终导致重绘
1.22 DataBinding 要求属性 setter 是公共的
1.23 不允许在 SetBinding() 后更改 Binding.Path
Silverlight兼容2 . 自 Silverlight 3 Beta 以来的重大更改
2.1 DockPanel、WrapPanel、Expander、HeaderedContentControl、Viewbox、DataForm 迁移到了 Silverlight 工具包
2.2 AutoCompleteBox:成员和类型重命名
2.3 AutoCompleteBox 的新模板部件:Selector, typeof(Selector)
2.4 AutoCompleteBox.TryGetSelectionAdapter(object o) 现在是 GetSelectionAdapterPart()
2.***utoCompleteBox:ToggleButton 类型的 DropDownToggle 模板部件已删除
2.6 DataGrid RowGroupExpanding 和 RowGroupCollapsing 事件已删除
2.7 DataGrid.SortDescriptions 和 GroupDescriptions 属性已删除
2.8 用 ValidationSummary 而非 ListBox 显示 DataGrid 实体级别验证错误
2.9 DataForm 更改
2.10 针对 System.ComponentModel.dll 和 DataPager 的重大更改
2.11 PagedCollectionView
2.12 DataPagerAutomationPeer
2.13 BindableAttribute 和 BindingDirection 已删除
2.14 对 ValidationAttribute 的更改
2.15 [CustomValidation] 方法的签名已更改
2.16 框架仅支持导航到页面
2.17 与 UriMapper 相关的框架重大更改
2.18 效果文件 (.ps) 不再作为 Content 加载
2.19 WriteableBitmap 更改
2.20 RenderOptions.TextRenderingOptions 现在是 TextOptions.TextHintingMode
2.21 透明平台扩展不在 Microsoft.com 上承载
2.22 浏览器外 API 名称更改
2.23 ExecutionStates.DetachedUpdatesAvailable 已删除
2.24 Icon.Size 类型更改并且 <Icon Size="..."> 格式已更改
2.25 XmlConvert.IsNCNameSurrogatePair() 和 IsStartNCNameSurrogatePair() 已删除
2.26 SaveFileDialog.File -> SaveFileDialog.SafeFileName
2.27 DataAnnotations.Validator 重大更改
Silverlight兼容3 . 升级重大更改
3.1 OpenFileDialog.ShowDialog() 现在只能从用户启动的事件打开
3.2 Tab 键定位处理和关联的回调从异步更改为同步
3.3 弹出项内的鼠标事件现在提供相对于弹出项的位置,而非相对于整个应用程序的位置
3.4 弹出项现在只能具有一个父级
3.5 弹出项内的名称范围现在正常工作
3.6 FindElementsInHostCoordinates 现在搜索弹出项
3.7 删除了与在 ItemsControl 中替换项相关联的多余事件
3.8 ScrollViewer 现在将滚动条位置固定到 ScrollableWidth/ScrollableHeight
3.9 在设置了 Stretch 并且 Height 和/或 Width 未设置时,矩形和椭圆现在出现
3.10 TextBlock、TextBox 和 PasswordBox 的宽度现在向上舍入
3.11 textblock.FontFamily = null 引发 ArgumentNullException
3.12 空格不再在模板内的 Run 元素之间呈现
3.13 RadioButton.GroupName 现在在模板外搜索 RadioButtons
3.14 ComboBox 内容现在令 IsHitTestVisible="false"
3.15 TextBox 现在注重 Opacity 属性
3.16 具有空参数的 FrameworkElementAutomationPeer ctor 引发 NullReferenceException
3.17 HyperlinkButton 现在将导航整个窗口,而不只是 Silverlight 位于其中的 IFRAME
3.18 更正了在 Silverlight v2+ 应用程序不具有 XAP 文件扩展名时使用的基 URI
3.19 Application.Current.Host.Source 现在返回绝对 URL,甚至在 .xap URL 具有查询字符串时也是如此
3.20 ResourceDictionary 枚举错误已修复
3.21 ReadOnlyObservableCollection 已从 System.Windows.Controls.Data.dll 迁移到 System.Windows.dll
3.22 DataGridEndingEditEventArgs 已从 Silverlight SDK 中删除
3.23 PollingDuplexHttpBinding 更改
3.24 与删除事件处理程序有关的错误修复
3.25 错误修复:允许 <Cursors>,而非 <Cursor>
3.26 XAML 中的自定义附加属性要求 xmlns 为前缀
3.27 错误修复:子类控制可能会加载错误的资源
3.28 错误修复:在路径上的叶对象为空时不调用 ValueConverter
3.32 指向 .xap 外的资源的相对 URL 现在相对于 .xap 文件,而非 HTML 页
3.33 不再支持在 SetBinding() 后设置 Binding 属性
3.34 ContentPresenter 的子级现在只能具有一个父级
3.35 Thumb 控件现在相对于绝对位置计算拖放,而非相对于其父级计算拖放
3.36 DataGrid 不再默认选择***项
对于Silverlight兼容的问题我们还需要在实践中区慢慢积累经验来进行改造。