使用Expression Blend SDK Behavior打破Visual Studio Designer

时间:2009-08-29 01:16:04

标签: c# wpf xaml

我遇到了新的Expression Blend行为问题。

我使用Expression Blend 3 SDK开发了一个自定义的Behavior<T>类。

行为正常,解决方案可以编译。那是完美的。我在我的项目中设置了所有引用该行为的引用(System.Windows.Interactivity.dll + Microsoft.Expression.Interactions.dll)。

另外,正如我所提到的,Visual Studio可以很好地编译项目。

但是,如果我在Visual Studio设计器中加载XAML文件,则在解决方案编译后会出现以下错误

  

错误1在“交互”类型中找不到可附加属性“行为”。 C:\ Path \ To \ MyFile.xaml 19 14 MyApplication

该文件的那一行是以下第一行:

<Interactivity:Interaction.Behaviors>
    <Behaviors:DoubleTextBoxBehavior />
</Interactivity:Interaction.Behaviors>

我的窗口参考设置为:

xmlns:Interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

我甚至已经消除了我的自定义行为。我可以包含以下行,并“打破”设计师:

<Interactivity:Interaction.Behaviors />

据我所知,这应该有效。不应该有错误。编译器可以处理这个问题,但是当我添加行为行时,Visual Studio不会在设计器中加载它。

有没有人知道可能导致这种情况的原因,以及如何解决这个问题?


编辑:

我已经做了一些测试,这似乎只是在Visual Studio 2008中的Windows Presentation Foundation Designer窗口中发生的错误(使用sp1)。该项目工作正常,并且没有报告错误,前提是我只使用XML编辑器。但是,如果我在Designer中打开它,它会报告错误并显示问题加载设计器。

除非在VS设计器中打开XAML文件,否则不会出现错误。

3 个答案:

答案 0 :(得分:3)

这是由于Visual Studio中的已知问题,并由修补程序KB958017解决。

可以通过下载并安装KB958017 Rollup Fixes for Visual Studio Designer来解决此问题。

答案 1 :(得分:1)

我试图重现你的问题,但我做不到。我创建了以下WPF应用程序:

<Window x:Class="WpfBehaviorsTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
Title="Window1" Height="300" Width="300">
<Grid>
    <Interactivity:Interaction.Behaviors/>
</Grid>
</Window>

在编译项目之前和之后,一切正常。你能测试一下这对你有用吗?您使用的是什么版本的MS Blend SDK?什么版本的Visual Studio?只是为了确定:我们谈论WPF应用程序,而不是Silverlight,对吗?

<强>更新 你有与我完全相同的配置。唯一的问题是它在这里工作,但不适合你。让我们通过以下检查来压制这种昆虫:

  1. 设计器加载了什么版本的“System.Windows.Interactivity”程序集?您可以运行另一个MS Visual Studio实例并使用“buggy”附加到第一个VS进程 - 设计师。转到Debug-&gt; Windows-&gt; Modules并检查System.Windows.Interactivity.dll的版本。如果它看起来不错,你仍然可以用Reflector进行双重检查。它有交互类吗?是否有BehaviorsProperty?

  2. 里面究竟发生了什么?如果我们在步骤1中检查过的装配是正确的,那就让我们运行重型火炮。事实上,每当我遇到VS / Blend设计器问题时,我都经常使用这种方法。只需运行Visual Studio的另一个实例。打开所有CLR异常的中断(Debug - &gt; Exceptions-&gt;选中CLR异常后的复选框)。打开.NET source code debugging也可能有所帮助。使用无效的设计器附加到实例。重新加载设计师。现在,附加的Studio不会看到令人困惑的消息,而是将我们带到了Exception的核心。有什么?

答案 2 :(得分:1)

我正在使用VS2010,我遇到了同样的问题,但找到了解决方案。

我的解决方案中有两个项目。项目“A”在silverlight控件中使用了Behaviors(在xaml中定义)。然后我引用了正在执行的活动silverlight项目“B”中的项目“A”中的控件。我一直收到错误在“互动”类型中找不到可附加属性“行为”

当我将System.Windows.Interactivity引用添加到项目“B”时,它修复了我的运行时错误。

我不确定为什么没有加载该引用,因为它正被来自项目“A”的控件使用,但事实并非如此。哦,好吧。