在Silverlight中工作时,您会错过什么.Net/WPF功能?

Ric*_*ich 29 .net silverlight wpf xaml

我最近开始使用Silverlight,并立即注意到Silverlight BCL与完整的.Net和WPF之间的区别.对于其中一些人,我发现其他开发人员在网上发布了很好的解决方案,其他人则更复杂.您在Silverlight类库中找不到哪些功能/类令您感到惊讶/失望,您是如何解决它们的?

我的一些人是:

  1. 没有事件触发动画 - 我创建了一个带有静态方法的辅助类,用于将我用过的每种类型的动画附加到共享库中的故事板上,在应用程序级别,我使用静态方法创建类,将它们放在一起,就像我一样在XAML中如果在WPF中工作.到目前为止,这是一个很好的解决方案,可以保持我的动画组织和我的事件处理程序的逻辑.
  2. ScrollViewer不支持鼠标滚轮 --Adam Cooper创建了一个优秀的类库,它添加了这个功能,只需要在任何Silverlight项目中实现最少的代码.他的网站目前似乎有所下降,所以这里是Tim Heuer博客的链接,解释并链接到它(所以当他的网站重新上线时它将可用). 在Silverlight中为ScrollViewer添加鼠标滚轮支持
  3. SortedDictionary<T, K>不见了. 我发现这篇文章包含一个实现,但我最终没有自己使用它.
  4. ResourceDictionary.MergedDictionaries不可用 - 再次......发现有人实现了这个并发布了源代码,但它似乎有点复杂.我可能会稍微研究一下,但还没有这样做. Silverlight中的MergedDictionaries
  5. ZIndex附加属性仅在Canvas对象上可用. 我在这里发布了一个关于SO的问题,有人提出了一个很好的建议,即如果需要的话,将我的容器包装在一个集合中.感觉有点草率,但你必须做你必须做的事情.我的容器嵌套了三层深,所以我可能需要在Canvas对象中将它们全部扭曲,并为每个事件设置Canvas.ZIndex三次.像罪一样丑陋,但如果这是唯一的方式,那就这样吧.

我很想知道更有经验的Silverlight开发人员遇到的其他常见问题以及您采取了哪些措施来解决这些问题.

Pau*_*ell 35

我该从哪里开始?:)

  • 没有MultiBinding
  • 没有ElementName =绑定
  • TemplateBinding只能引用直接属性,而不是附加DP
  • 没有RelativeSource绑定
  • 没有绑定到子属性 - 例如,{Binding Path=Foo.Bar[0].Baz}
  • 无法在任意任意依赖项属性上订阅已更改的事件 - 类作者必须明确定义事件(在大多数情况下,SL控件中只有一个或两个属性实际执行)
  • 可视状态管理器需要控件作者知道所有样式可以状态时控制写入,从而彻底打破了WPF促进的故事"通过样式/模板,没有继承扩展"
  • 没有装饰者
  • 没有导航
  • 没有依赖属性继承
  • 没有/ sucky支持外部ResourceDictionaries /合并的词典
  • 验证故事很糟糕(在WPF中它只是稍微好一些)
  • 印花
  • <Setter .. Value="{Binding ...}" /> 不受支持

最重要的是,许多方法签名没有任何理由改变.例如,IIRC,Dispatcher.Invoke的重载是不同的,而不是SL只是忽略它无法处理的参数.或者作为另一个例子,WPF中的ObservableCollection可以引发添加,删除,替换和移动事件 - 在SL中它只是前三个.

由于我编写的代码可以在两个平台上运行,因此代码最终会出现在策略模式和#ifdefs中.感觉像C++一样:-)

  • 仅仅是为了记录,其中大约1/3是在SL3中解决的. (5认同)