我最近开始使用Silverlight,并立即注意到Silverlight BCL与完整的.Net和WPF之间的区别。对于其中一些人,我发现其他开发人员在网上发布了很好的解决方案,其他人则更复杂。您在Silverlight类库中找不到哪些功能/类令您感到惊讶/失望,您是如何解决它们的?
我的一些人是:
SortedDictionary<T, K>
缺失。我发现this post包含一个实现,但我最终没有自己使用它。我很想知道Silverlight开发人员遇到的其他常见问题以及您为解决这些问题所采取的措施。
答案 0 :(得分:35)
我从哪里开始? :)
{Binding Path=Foo.Bar[0].Baz}
<Setter .. Value="{Binding ...}" />
不受支持除此之外,许多方法签名都没有任何改变。例如,IIRC,Dispatcher.Invoke的重载是不同的,而不是SL只是忽略它无法处理的参数。或者作为另一个例子,WPF中的ObservableCollection可以引发添加,删除,替换和移动事件 - 在SL中它只是前三个。
由于我编写的代码可以在两个平台上运行,因此代码最终会出现在策略模式和#ifdefs中。感觉像C ++一样: - )
答案 1 :(得分:3)
除了Paul Stovell优秀列表外:
x:Type
标记扩展名。LayoutTransform
(虽然有workarounds)。DependencyProperties
没有便利元数据(必须手动定义测量/排列/渲染失效,属性更改等)。Drawing
或DrawingContext
类(必须使用Shape
元素)。答案 2 :(得分:2)
对于我来说,没有套接字或UDP支持可能是最大的痛苦,其次是缺少加密类。
此外,你习惯但后来发现的像StringDictionary和ApplicationException这样的遗漏分类并不痛苦。一般来说,有可能找到一个替代品或解决方法,但我个人认为Silverlight下载从5MB到6MB,所以我们没有; - )。
我在博客上看到的一个非常方便的技巧是允许我重用我的普通.Net程序集,将现有项添加为链接。在许多情况下,现在我有两个项目文件使用相同的类文件,其中一个目标是.Net 3.5,另一个是Silverlight运行时。我非常感谢我找到了这个技巧,因为我已经开始为.Net 3.5和Silverlight创建不同的代码库了!
答案 3 :(得分:2)
作为设计师,缺少事件/属性触发器是所以剥夺功能。
我不是C#/ oop家伙所以当我必须在项目加载或点击按钮时或在另一个故事板完成后触发一系列故事板时,我必须调用开发人员:(
答案 4 :(得分:2)
显然在评论felix时,评论需要一定的声誉。
但是我想继续他对Event / Property触发器的调用...... WPF中的Triggers框架允许我作为交互设计师做一些非常强大的事情,而不必深入研究代码。我想念它。
答案 5 :(得分:2)
以下是我将WPF应用转换为Silverlight时遇到的一些事情:
枚举类不同......无法在Silverlight(可以在WPF中)中绑定到枚举:
HoleType1.ItemsSource = Enum.GetValues(typeof(Hole.HoleTypes));
画笔颜色的工作方式不同......
WPF:
protected Brush _CurrentHoleColor = Brushes.Red;
Silverlight的:
protected Brush _CurrentHoleColor = new SolidColorBrush(Colors.Red);
3。还没有解决过这个问题,但是我用这个WPF代码检查点击鼠标的位置有所不同:
System.Windows.Media.VisualTreeHelper.HitTest(canvas1, p);
4。我认为使用
创建新线程的重载略有不同this.Dispatcher.BeginInvoke(....)
答案 6 :(得分:0)
我最大的抱怨是缺乏对所有可用WCF绑定的完全支持。只能通常能够使用BasicHttpBinding意味着解决问题的银色解决方案不是一个有效的选择。
答案 7 :(得分:0)
没有3D支持。
答案 8 :(得分:0)
Silverlight的不可变样式和缺少字典合并也很重要 - 如果你正在编写控件,这两个会给你带来很多麻烦 - 更不用说无法管理的大型generic.xaml文件了。
答案 9 :(得分:0)
透视3D很棒,但我等不及真正的3D!
答案 10 :(得分:0)
ScrollViewer
没有更改事件(您必须使用绑定hack)DocumentFlow
支持WebClient
不允许您执行HTTP身份验证请求。我最大的痛苦: