Silverlight最大的问题是什么?

Silverlight最大的问题是什么?,silverlight,Silverlight,我最近一直在Silverlight工作,我慢慢地发现,尽管开发起来很简单,但阴影中隐藏着一两个恼人的陷阱 考虑到其中一些对我来说是多么的困难,我想把它们列在这里可能会对其他人有所帮助。我确信我遇到的那些事情与其他人的经历相比是微不足道的,我想尽量避免任何其他令人讨厌或耗时的意外 那么,你得到了什么 更新 我已经更新了这个以涵盖Silverlight。因此,请在响应时提供一个版本或列出与gotcha相关的版本。对于所有没有版本的用户,请假设Silverlight 2.0,因为原始问题就是这样。我经

我最近一直在Silverlight工作,我慢慢地发现,尽管开发起来很简单,但阴影中隐藏着一两个恼人的陷阱

考虑到其中一些对我来说是多么的困难,我想把它们列在这里可能会对其他人有所帮助。我确信我遇到的那些事情与其他人的经历相比是微不足道的,我想尽量避免任何其他令人讨厌或耗时的意外

那么,你得到了什么

更新

我已经更新了这个以涵盖Silverlight。因此,请在响应时提供一个版本或列出与gotcha相关的版本。对于所有没有版本的用户,请假设Silverlight 2.0,因为原始问题就是这样。

我经历过的两个问题是:

跨域策略文件 为了使Silverlight能够使用托管在不同域上的Web服务,服务器需要。这可以采用两种格式:

  • clientaccesspolicy.xml
  • crossdomain.xml
我无法让前者正常工作,但后者正常工作(Flash使用第二个,而我相信第一个是特定于ASP的,尽管我无法让它在ASP.NET 2.0服务器下工作,因此它可能是特定于3.5的)

组合框下拉菜单调整大小 Silverlight 2.0 combobox控件仅在首次显示时调整其下拉区域的大小一次。因此,它的大小基于列表中的初始项。这意味着即使列表增加到200项,2项也会给您一个2项的高下拉列表。解决这个问题的唯一方法似乎是在每次项目更改时用一个全新的控件替换组合

请注意,将“高度”属性或“最大高度”属性设置为一个值,该值会导致项目在下拉列表的初始显示中出现在列表之外,这将导致缺少垂直滚动条,因此无法访问列表中的项目。我找到的唯一解决方案是使用MinHeight属性,使所有用途的高度至少都合适,如果项目超过最小高度,就让它变大

此外,当您调整浏览器窗口的大小时,无论是否使用MinHeight,然后下拉组合列表或在其可见时调整大小,都会不可逆转地减小下拉列表的大小

更新
,多亏了。

我错过了双击事件。我很惊讶它不在那里,并一直在智能感知列表中查找:-)通过创建一个黑客解决了它,但这不是一个解决方案。

ComboBox古怪 有一件事是组合框的怪异之处——我亲眼看到过,我还看到了组合框的另一个非常令人恼火的问题。如果您试图从按钮单击事件的事件处理程序中更改组合框中的项目,您将得到一条我目前无法想到的神秘错误消息。我的解决方案与Jeff的解决方案相同——移除组合框,构建一个新的组合框,用更改的项目集填充组合框,然后将其添加回包含的面板

没有ElementName绑定 Silverlight对WPF的ElementName绑定能力没有任何影响。有一个很好的解决方法,对我来说非常有效

不支持鼠标滚轮事件 本机不支持捕获鼠标滚轮事件。提供使用浏览器事件的解决方案

UserControls上没有卸载的事件 有一个已加载的事件,但没有已卸载的事件-如果您想从屏幕上删除控件并运行一些卸载逻辑,则需要以自己的方式执行此操作。我有一个IUnloadable接口,我从中派生出我的控件,需要运行卸载逻辑并在适当的时候手动调用其中的方法



最后,与WPF相比,我有一些关于Silverlight缺少什么的好信息。

不久前,我在Silverlight 2.0中做了一个项目,该项目是使用TDD和MVP驱动的。我的服务引用位于单独的程序集中,因此视图不需要知道模型。我找到了servicerences.ClientConfig文件的位置,该文件需要在视图的程序集中

如果添加服务引用,将生成此文件。我们添加了一个WCF Web服务,但我是Silverlight的新手,因此不知道Silverlight应用程序是作为XAP编译和打包的

如果您的servicerences.ClientConfig文件不在此XAP中,则会出现问题

这是我的两分钱。不久前,我在Silverlight论坛上发布了这篇文章,似乎我不是唯一一个应用gotcha的人


最近让我感到困惑的一点是没有LayoutTransform属性(尽管有RenderTransform属性)。因此,您不能应用变换并使相邻元素遵守控件的“新空间要求”,这将导致它与其他元素重叠或有空白


这对我来说是个问题,因为我希望滚动查看器中的可滚动区域随着变换而改变。我可以绕过它,但如果您尝试旋转或进行另一个转换,过程会困难得多。

使用IE6,并且承载Silverlight应用程序的网站启用了压缩功能(HTTP 1.1标题)


无论何时进行web服务调用,它都会失败,即使Fiddler显示请求已发送且响应已成功到达。

我发现调试支持非常脆弱。它曾经对我起过作用,但从那以后就再也没有了,不管我怎么尝试。我认为只有通过使用Silverlight ASP支持的ASP.NET 3.5站点进行调试时,它才能正常工作。

解决了的 问题在于使用谷歌浏览器。因为谷歌Chrome拥有Silver
<style type="text/css">
  html, body, form { height: 100% }
</style>
public class CustomDataObject : FrameworkTemplate, INotifyPropertyChanged
{ ... }