XamlParseException с использованием элемента управления Silverlight Toolkit в Expression Blend - PullRequest
8 голосов
/ 20 января 2010

У меня странная проблема с открытием моего UserControl в Expression Blend при использовании элемента управления Silverlight Toolkit. Мой UserControl использует ListBoxDragDropTarget инструментария следующим образом:

<controlsToolkit:ListBoxDragDropTarget mswindows:DragDrop.AllowDrop="True" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
        <ListBox ItemsSource="{Binding MyItemControls}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <controlsToolkit:WrapPanel/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>
</controlsToolkit:ListBoxDragDropTarget>

Все работает должным образом во время выполнения и отлично выглядит в Visual Studio 2008. Однако, когда я пытаюсь открыть свой UserControl в Blend, я получаю XamlParseException: [Строка: 0 Позиция: 0] , и я не могу увидеть что-нибудь в представлении дизайна. Точнее, Бленд жалуется:

Элемент «ListBoxDragDropTarget» не может быть отображен из-за проблемы с System.Windows.Controls.ListBoxDragDropTarget: несоответствие TargetType.

Мое приложение silverlight ссылается на System.Windows.Controls.Toolkit из выпуска инструментария от ноября 2009 года, и я обязательно включил эти объявления пространства имен для ListBoxDragDropTarget:

xmlns:controlsToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"
xmlns:mswindows="clr-namespace:Microsoft.Windows;assembly=System.Windows.Controls.Toolkit"

Если я закомментирую обёртку элемента управления ListBoxDragDropTarget и просто оставлю ListBox, я смогу увидеть все отлично в режиме конструктора без ошибок. Кроме того, я понял, что это происходит с различными элементами управления Silverlight Toolkit, потому что если я закомментирую ListBoxDragDropTarget и заменим его на

<controlsToolkit:BusyIndicator />

такая же точная ошибка возникает в Blend. Что еще более странно, так это то, что, если я запускаю совершенно новое приложение silverlight в blend, я могу добавить эти элементы инструментария без каких-либо ошибок, поэтому кажется, что со ссылками на мой проект в сборках инструментария происходит нечто глупое.

Я почти уверен, что это как-то связано с загрузкой стилей по умолчанию для элементов управления инструментария из его generic.xaml, поскольку ошибка связана с TargetType, и Blend, вероятно, пытается загрузить стили по умолчанию.

Кто-нибудь сталкивался с этой проблемой раньше или есть идеи относительно того, в чем может быть моя проблема?

Ответы [ 4 ]

11 голосов
/ 17 августа 2010

Привет, у нас была точно такая же проблема, мы решили ее, проверив ссылки в проекте, в котором была эта проблема. Все упомянутые сборки инструментария должны находиться в одном каталоге на диске.

Ссылка нашего проекта на System.Windows.Controls.Toolkit.dll всегда «перепрыгивала» обратно на оригинальный путь, который вызывал нашу проблему. Мы решили, отредактировав файл проекта в notepad ++ (или любом другом вашем любимом текстовом редакторе) и жестко прописав путь, по которому он мог найти сборку.

Надеюсь, это поможет.

5 голосов
/ 13 июля 2010

Для Visual Studio (возможно, тоже Blend) вам нужно добавить ссылку на:

System.Windows.Controls.Toolkit.Internals.dll

"C: \ Program Files \ Microsoft SDKs \ Silverlight \ v4.0 \ Toolkit \ Apr10 \ Bin \ System.Windows.Controls.Toolkit.Internals.dll"

1 голос
/ 09 апреля 2012

Я использую набор инструментов Silverlight 5 и имею XamlParseException при использовании элемента управления BusyIndicator в Expression Blend для SL 5, все вышеупомянутые решения не помогли, но я нашел другой обходной путь, он довольно грязный, но позволяет BusyIndecator работа в Expression Blend,

  1. происходит от контроля

    public class BusyIndicatorEx : BusyIndicator
    {
        public BusyIndicatorEx()
        {
            this.DefaultStyleKey = typeof(BusyIndicatorEx);
        } 
    }
    
  2. создать стиль для производного элемента управления (просто скопируйте стиль из BusyIndicator исходного кода в themes / generic.xaml и измените тип цели на local:BusyIndicatorEx)

0 голосов
/ 01 декабря 2012

У меня была та же проблема, которая была решена введением фиктивной ссылки в коде панели Wrap Panel.

Я знаю, что это немного C ++ y, но я могу себе это представить, потому что у нас есть косвенная ссылка на панель переноса внутри шаблона, а не на страницу верхнего уровня, поэтому загрузчик не знает, что загружать при инициализации. Мне правда нравится понимать точную причину.

Я только что сослался на System.Windows.Controls.Toolkit и ввел следующий член в коде:

System.Windows.Controls.WrapPanel _dummy;
...