Каковы основные моменты трения при переходе от WPF к Silverlight и как вы заполняете пробелы в функциональности?
Хорошо, чтобы дать небольшой опыт, я изучил WPF около 3 лет назад и постоянно рассуждал о том, что произошло с тех пор, как в разных версиях. Я посмотрел (и реализовал) MVVM на пару проектов, хорошо посмотрел на фреймворки, такие как Prism, поэтому я думаю, что я довольно хорошо разбираюсь в большинстве областей фреймворка. Я также кратко рассказал о нескольких небольших проектах Silverlight 2.0.
Моя проблема в том, что я собираюсь начать работу Silverlight в новой компании, и, хотя мне очень удобно, что я могу хорошо выполнять эту работу, мне кажется, что мои знания WPF могут вызвать у меня некоторые проблемы. Я просмотрел документ WPF/Silverlight на кодексе, который является отличным и действительно полезным, но хотя он подчеркивает различия, которые все еще оставляют меня интересно, как обойти эти различия.
Например, я знаю, что DataTriggers
отсутствуют как есть MultiBindings
и целый массив других вещей. То, что меня интересует в чтении, - это не различия, а как то, что вы получаете из этих различий или какие другие шаблоны полезны в Silverlight. Что, если мне нужен a DataTrigger
? ясно, что мой дизайн должен учитывать эти вещи.
Итак, вопрос в том, что.. если вы прошли этот переход, какие различия вызвали у вас наибольшую проблему и как вы обходились?
Ответы
Ответ 1
Во-первых, в то время как это датируется Silverlight 3, в этом документе подробно описываются различия между WPF и Silverlight:
Microsoft WPF-Silverlight Diffferences White Paper
http://wpfslguidance.codeplex.com/releases/view/30311
Это отличный первый шаг, чтобы ознакомиться с различиями.
Вы также можете взглянуть на проект Prism. Одна из целей этого проекта - создать набор функциональных возможностей взаимодействия между Silverlight и WPF, чтобы вы могли по существу создавать корпоративные приложения, ориентированные на обе платформы, и повторно использовать большую часть кода. Знакомство с проектом поможет также выявить различия:
http://compositewpf.codeplex.com/
Наконец, в то время как Silverlight может не иметь триггеров данных, вы можете использовать комбинацию таких функций, как поведение и триггеры:
http://www.silverlightshow.net/items/Behaviors-and-Triggers-in-Silverlight-3.aspx
И диспетчер визуальных состояний (VSM):
http://timheuer.com/blog/archive/2008/06/04/silverlight-introduces-visual-state-manager-vsm.aspx
Чтобы выполнить большую часть того, что вам нужно.
Ответ 2
Предоставление порта Silverlight как такового для нашего приложения WPF, следующие две "болевые" точки, с которыми мы столкнулись.
- Разделение и группировка XAML/модулей для повышения производительности и по требованию XAP-загрузки с использованием MEF.
- Задача достижения бинарной совместимости с использованием той же базы кода для WPF/Silverlight.
- Для некоторых наших функций требуется OOB и принятие пользователем.
- Мы оптимизировали немного функциональности, полагаясь на IsolStorage.
Надеюсь, что это поможет.
[Теперь, когда Silverlight 4.0 имеет стабильную сборку, у нас было несколько иконов Visual Studio за последние несколько выпусков, которые разрешили себя сверхурочно. (Мы придерживались Silverlight 3.0, а где-то в середине марта прыгали на бета-версию SL 4.0 и финальную версию)].
N.B.: Я попытался сохранить абстрактную картину, чтобы не выявить личность клиента.
Ответ 3
- MarkupExtension
- IMultiValueConverter
- Template.Triggers
- Style.Triggers
- Связывание RelativeSource = {RelativeSource AncestorType...
- Binding.IsAsync
- {x: Static...
- {DynamicResource...
- Grid.IsSharedSizeScope/SharedSizeGroup
Все они не поддерживаются в Silverlight, и вы должны обходить их.
Каждый случай нуждается в собственном суждении о том, как "заполнить пробелы"
Для части триггеров единственным решением является использование VisualStateManger.
Следующая статья дает хороший пример того, как сделать переход от триггеров к VSM: http://blogs.msdn.com/b/wpfsdk/archive/2009/02/27/the-visualstatemanager-and-triggers.aspx
Далее, OnApplyTemplate запускается в другом порядке, что может повлиять на любые настраиваемые элементы управления или UserControls, которые вы, возможно, создали.
WPF:
- Конструктор UserControl
- Конструктор MyControl
- MyControl.OnApplyTemplate
- UserControl Loaded
- Загрузка MyControl
Silverlight:
- Конструктор UserControl
- Конструктор MyControl
- Загрузка MyControl
- UserControl Loaded
- MyControl.OnApplyTemplate
И, конечно, у Microsoft есть статья об этом, называемая "совместимость WPF", и дает более подробный обзор различий и изменений между WPF и Silverlight:
http://msdn.microsoft.com/en-us/library/cc903925(VS.95).aspx
Надеюсь, что это поможет
Ответ 4
Silverlight заставляет вас внести некоторые изменения в ваши шаблоны проектирования, которые, если они распространены повсюду в вашем программном обеспечении, могут значительно сократить повторное использование кода.
Например, селектора шаблонов данных отсутствуют - я обнаружил, что это довольно шок.