【问题标题】:Usage of same xaml file for silverlight and wpf applicationSilverlight 和 wpf 应用程序使用相同的 xaml 文件
【发布时间】:2012-08-09 12:56:09
【问题描述】:

我想对 silverlight 和 wpf 版本的应用程序使用相同的 xaml 文件。

我需要的唯一区别在于样式。我在 xaml 中使用了样式。但是对于 silverlight,我不想在我的 xaml 文件中使用任何样式,因为样式是以主题形式定义的应用程序级别。

是否有任何其他方法可以将相同的 xaml 文件用于 silvelight 和 wpf 版本?否则我不得不维护单独的 xaml 文件。

【问题讨论】:

  • 如果你真的想走这条路(不推荐),你可以使用 TT 文件。这意味着创建一个更复杂的设置,以便更改出现在两者中,但共享文件可能不再可编辑。如果它们非常接近,您可以编写一个文本解析器,通过删除样式将您的 WPF XAML 转换为 Silverlight XAML,但坦率地说,您最好将文件分开(毕竟这是一个艺术问题):)

标签: c# wpf silverlight xaml


【解决方案1】:

您可以为两者重用相当多的 xaml,我有一些项目,我在其中链接所有相同的文件、xaml 和代码,并且它运行良好。

需要注意的一点是,某些东西并不总是能很好地匹配,例如 wpf 有一个用于 itemscontrol 的模板选择器,而 silverlight 没有。

使用 SizeToContent 往往会在两者中产生不同的行为,我建议避免使用它,我认为它不会给你带来任何好处。

我建议有一个单独的“基础”资源,您可以在其中保留两个文件中的差异。例如,事件触发器之类的东西在 silverlight 中几乎没有填写。每个版本都有一个基类,它们会抽象出它们的差异,然后您可以将键标记为相同并将它们用作链接文件中的静态资源。

另一个大问题是你要注意 uielements 发生的顺序事件,加载、布局和应用模板事件会以不同的顺序应用,所以如果你要制作一个模板化控件,你必须小心,它不是一个交易破坏者,你可以解决它,只是要注意。

其他需要注意的事项 -silverlight 命令需要更多的努力,您必须实现 ICommand,这在 wpf 中并非总是如此,不过我使用我的实现来帮助共享代码。 -wpf 是超集,它有很多silverlight 没有的功能,通常它们是方便的做事方式,你只想避免这些。很好的例子是 Preview 事件,而不是 silverlight,但您通常可以找到与行为匹配的事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    相关资源
    最近更新 更多