8

使用Silverlight Toolkit控件时,我遇到了一个奇怪的问题,在Expression Blend中打开了我的UserControl。我的用户使用该工具包的ListBoxDragDropTarget如下:在Expression Blend中使用Silverlight工具包控件的XamlParseException

<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中看起来很好但是,当我尝试打开我在Blend用户控件我得到XamlParseException:[行:0位置:0],我在设计视图中看不到任何东西。更具体地说混合抱怨:TargetType的不匹配:

元素“ListBoxDragDropTarget”不能因为System.Windows.Controls.ListBoxDragDropTarget的问题显示出来。

我的Silverlight应用程序从2009年11月发布的工具包引用System.Windows.Controls.Toolkit,我已经取得了一定要包括该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工具包控制的情况发生,因为如果我注释掉ListBoxDragDropTarget与

<controlsToolkit:BusyIndicator /> 

在Blend发生相同的确切的错误更换。更奇怪的是,如果我在混合中启动一个全新的Silverlight应用程序,我可以添加这些工具箱元素而不会出现任何错误,所以看起来像我的项目引用工具包程序集时发生了一些愚蠢的事情。

我敢肯定,这与从generic.xaml中加载工具包控件的默认样式有关,因为错误与TargetType有关,Blend可能会尝试加载默认样式。

有没有人遇到过这个问题之前或有任何想法可能是我的问题?

+0

混合的版本? – AnthonyWJones 2010-01-20 22:19:08

+0

Expression Blend 3,特别是3.0.1927.0 – 2010-01-21 00:36:00

回答

11

嗨,我们有完全相同的问题,我们通过检查项目中有这个问题的引用来解决它。所有引用的工具包程序集应位于磁盘上的同一目录中。

我们对System.Windows.Controls.Toolkit.dll的项目引用总是'跳'回到导致我们问题的原始路径。我们通过在记事本++(或任何您最喜欢的文本编辑器)中编辑项目文件来解决这个问题,并对它可以找到程序集的路径进行硬编码。

希望这会有所帮助。

+0

I抛出了很久以前就有这个问题的项目,结果做了其他的事情,所以我没有办法验证这一点。我现在将它标记为答案,因为它看起来像其他人面临这个问题,如果它 – 2010-08-18 19:21:44

+0

谢谢你,你真的为我节省了两天的愚蠢;) – Peymankh 2010-12-07 07:56:04

+0

非常感谢你们拯救了我的一天!! :) – 2011-09-15 02:34:20

5

对于Visual Studio(也许太混合),你需要添加一个引用:

System.Windows.Controls.Toolkit.Internals.dll

“C:\ Program Files文件\微软的SDK \ Silverlight的\ V4.0 \工具包\ Apr10 \ BIN \ System.Windows.Controls.Toolkit.Internals.dll“

+0

这为我解决了它。请注意,最新版本(用于Silverlight 5)位于“C:\ Program Files(x86)\ Microsoft SDKs \ Silverlight \ v5.0 \ Toolkit \ dec11 \ Bin \ System.Windows.Controls.Toolkit.Internals.dll – andrewpm 2014-07-29 10:00:29

1

我使用Silverlight 5的工具包,并具有XamlParseException在Expression Blend中使用BusyIndicator工具控制SL 5时,上述所有的解决方案都没有帮助,但我发现了另外一个解决方法,它的比较脏,但允许我做BusyIndecator工作Expression Blend中,

  1. 从控制派生

    public class BusyIndicatorEx : BusyIndicator 
    { 
        public BusyIndicatorEx() 
        { 
         this.DefaultStyleKey = typeof(BusyIndicatorEx); 
        } 
    } 
    
  2. 创造派生的控件风格(只是从BusyIndicator复制源代码风格TH新兴市场经济体/ generic.xaml,并改变目标类型local:BusyIndicatorEx

+0

我该如何复制来自BusyIndi​​cator的风格?“themes/generic.xaml”在哪里? – Jordan 2013-05-07 15:46:36

0

我有其已通过引入在后面的代码到画布面板伪参考解决了同样的问题。

我知道这是一个小小的C++ y,但我可以想象这是因为我们有间接引用包装面板内的模板,而不是在顶层页面,所以加载器不知道加载初始化。不过,我真的很想明白确切的原因。

我只是引用System.Windows.Controls.Toolkit并介绍下面的成员在后面的代码:

System.Windows.Controls.WrapPanel _dummy; 
相关问题