【问题标题】:Visual Studio Designer broken using Expression Blend SDK BehaviorVisual Studio Designer 使用 Expression Blend SDK 行为损坏
【发布时间】:2010-11-23 22:06:45
【问题描述】:

我在使用新的 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 我的应用程序

文件的那一行是以下内容的第一行:

<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(带有 sp1)的 Windows Presentation Foundation Designer 窗口中发生的错误。项目运行良好,没有报错,前提是我只使用 XML 编辑器。但是,如果我在设计器中打开它,它会报告错误并显示问题加载设计器。

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

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      这是由 Visual Studio 中的已知问题引起的,已通过修补程序解决:KB958017

      这可以通过下载和安装KB958017 Rollup Fixes for Visual Studio Designer来纠正。

      【讨论】:

        【解决方案3】:

        我已尝试重现您的问题,但无法重现。我创建了以下 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->Windows->Modules 并检查 System.Windows.Interactivity.dll 的版本。如果它看起来不错,您仍然可以使用 Reflector 仔细检查它。它有 Interaction 类吗?里面有没有BehaviorsProperty?

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

        【讨论】:

        • 这个确切的代码为我解决了问题。我在 WPF 应用程序中使用带有 Expression Blend SDK 3 的 VS 2008 sp1。它编译并运行,但是当我在 VS Designer 中打开这个 xaml 文件时,我得到了错误。
        • 只有在设计器窗口中加载后才会出现错误 - 项目编译正确。如果在 XML 编辑器(仅限 WPF 设计器)中加载,则不会出现错误。
        • Anvaka:我非常感谢在这方面所做的所有工作。事实证明,这是由于 KB958017 中解决的已知问题造成的。
        • 芦苇,没问题。我很高兴你找到了解决方案:)。干杯。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多