Можно ли скомпилировать один и тот же элемент управления для WPF и Silverlight? - PullRequest
4 голосов
/ 13 марта 2011

У меня есть комплексный элемент управления для Silverlight, и мне нужно иметь такую ​​же функциональность в WPF. Есть ли способ поделиться кодовой базой?

Ответы [ 2 ]

3 голосов
/ 13 марта 2011

На самом деле есть три аспекта, которыми нужно поделиться:

  1. Файлы кодов (например, * .cs * .vb)
  2. XAML-файлы (включая темы)
  3. Файлы проекта (такие как * .csproj и * .vbproj)

Как указал Ярослав, вы можете использовать условное усложнение для файлов кода, которое поддерживается C # и VB.Net . Имейте в виду, что проекты Silverlight по умолчанию определяют символ SILVERLIGHT, поэтому вы можете использовать его в своих условных выражениях.

Еще один прием для файлов кода - использовать частичные классы . Это позволяет поместить целые блоки кода, которые могут применяться только к Silverlight или WPF (но не к обоим), в один файл. Затем выборочно включите этот файл в ваш проект.

Файлы Xaml немного сложнее, так как WPF поддерживает несколько вещей, которые не поддерживаются Silverlight (например, пользовательские MarkupExtensions и т. Д.). На практике я просто дублирую файлы XAML и объединяю их по мере необходимости.

Файлы проекта должны поддерживаться вручную, что не так уж сложно.

0 голосов
/ 14 ноября 2011

Я написал статью в блоге об обмене .xaml файлами.Идея состоит в том, чтобы создать прокси-элемент управления в исходном коде и использовать этот элемент управления в .xaml:

namespace UnifiedXaml
{
    public class MyWrapPanel: WrapPanel { }
}

<UserControl x:Class="UnifiedXaml.TestControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:ux="clr-namespace:UnifiedXaml">
    <ux:MyWrapPanel></ux:MyWrapPanel>
</UserControl>

Если элемент управления имеет разные функции в WPF и Silverlight, использует стили .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...