Silverlight 3 и Silverlight 4 условно xaml - PullRequest
2 голосов
/ 11 июля 2011

Я сейчас работаю над проектом, который должен разделять файлы проекта. Один соответствует Silverlight 3, а другой - Silverlight 4. Проект создает пользовательский элемент управления, который используется в паре других проектов. К сожалению, один находится в SL3 и не может быть обновлен прямо сейчас, поэтому необходима версия элемента управления SL3.

Пока что все работало нормально, но недавно я попытался добавить ViewBox к элементу управления. Это вызывает проблему, поскольку в SL3 он находится в наборе инструментов, а в SL4 - в ядре.

Есть ли способ извлечь его из инструментария в проекте SL3 и ядра в проекте SL4? Я изучил определения препроцессора в xaml и нашел некоторую информацию, но мне не нравится, как это убивает возможность загружать код в конструкторе.

Ответы [ 3 ]

1 голос
/ 11 июля 2011

В итоге я создал рамку вокруг внутренних элементов viewbox. Тогда я избавился от viewbox в xaml. Когда я загружаю элемент управления, я устанавливаю для дочернего элемента содержащей границу значение null, создаю в коде окно просмотра и устанавливаю для его дочернего элемента внутреннюю границу. Затем я устанавливаю дочерний элемент вмещающей границы в окно просмотра.

<Border Name="viewBoxContainer">
    <Border x:Name="innerBorder">
        <TextBlock x:Name="innerText" Text="Test" />
    </Border>
</Border>

Код позади

this.viewBoxContainer.Child = null;
this.viewBoxContainer.Child = new Viewbox { Child = this.innerBorder};
0 голосов
/ 21 июля 2011

У нас была та же проблема, и нашим решением было создать наш собственный viewbox, который использовался повсеместно.

По сути, мы просто взяли исходный код для Viewbox, предоставленный в наборе инструментов SL3, скопировали его ипоместите его в наше собственное пространство имен, а затем переименуйте в что-то вроде MyViewbox.

Я не уверен, что это лучшее решение, но оно хорошо сработало для нас.

0 голосов
/ 11 июля 2011

Нет, в XAML нет поддержки условных осложнений.Как насчет создания собственного подкласса в каждом проекте:

в проекте SL3:

using //namespace for SL3 ViewBox

namepsace MyProjectNamespace
{    
    public class MyViewBox : ViewBox
    {
    }    
}

в проекте SL4:

using //namespace for SL4 ViewBox

namepsace MyProjectNamespace
{    
    public class MyViewBox : ViewBox
    {
    }    
}

в вашем общем файле XAML:

<UserControl ...
      xmlns:local="clr-namespace:MyProjectNamespace">
  <local:MyViewBox>
    .. content goes here ..
  </local:MyViewBox>
</UserControl>
...