Проблема с x: имя с XAML, используемое между WPF и Silverlight - PullRequest
0 голосов
/ 05 апреля 2011

У меня странная проблема с разрешением пространства имен в моих файлах управления пользователями XAML.

Если я создаю новую библиотеку WPF, она добавляет следующее:

<UserControl x:Class="UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>

    </Grid>
</UserControl>

Это оценивает имя класса MyLibraryNameSpace.UserControl1.

Однако, если я добавлю библиотеку классов Silverlight и добавлю UserControl в это приложение, я получу следующий XAML

<UserControl x:Class="MyLibraryNameSpace.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">

    </Grid>
</UserControl>

Это оценивает одно и то же, но XAML отличается, поэтому у меня не может быть проектов Silverlight и WPF, ссылающихся на один и тот же XAML, поскольку оператор x: Class будет правильным для одного и неправильным для другого. Если я укажу x: Class = "MyLibraryNameSpace.UserControl1" в WPF, он будет интерпретирован как MyLibraryNameSpace.MyLibraryNameSpace.UserControl1 в моем текущем проекте.

Как заставить мою библиотеку WPF использовать полные имена классов или иным образом разрешить этот сценарий, чтобы я мог использовать одно пространство имен для общего кода WPF / Silverlight?

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

Совершенно возможно разделить UserControl между WPF и Silverlight (хорошая идея, которую я оставлю другим, для меня это зависит от того, сколько вы можете поделиться). Совместное использование XAML, безусловно, сложнее, чем совместное использование кода, поскольку вы не можете рассчитывать на то, что сможете выйти из несовместимости. Я ожидаю, что ваш Silverlight XAML выше будет работать в WPF как есть.

Мой обычный подход будет

  • Отдельные решения Silverlight и WPF с соответствующим проектом в каждом (с тем же именем / пространством имен)
  • Создание UserControl в проекте Silverlight
  • Добавить UserControl в проект WPF в виде ссылки

На самом деле я не вижу, какое отношение x: Name имеет к вашей проблеме, у WPF и Silverlight есть это.

0 голосов
/ 05 апреля 2011

Чем больше я думаю об этом, тем больше я думаю, что это просто дизайнерское решение, которое они по-разному принимали в командах WPF и Silverlight, и не настраивали его из-за страха нарушить обратную совместимость.В итоге я создал две подпапки: одну для WPF и одну для Silverlight.Файлы .xaml.cs хранились в папке элементов управления, но XAML был скопирован в папки Silverlight и WPF и немного изменен.Таким образом, код, по крайней мере, является общим.В дальнейшем я буду использовать элементы управления вместо пользовательских и буду преобразовывать существующие пользовательские элементы управления в элементы управления, когда смогу (что должно разрешить мне поделиться XAML).

Мораль истории: использоватьЭлементы управления многоцелевым таргетингом WPF / Silverlight, а не элементы управления пользователя.

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