为什么System.Windows.Interactivity不想工作?

我刚刚将这一行添加到我的XAML文件中:

xmlns:interactivity="clr-namespace:System.Windows.Interactivity" 

首先,我得到一个未定义的CLR命名空间错误,但在构建之后它被修复了。 现在,当我尝试在mt XAML文件中添加交互标记时,我在此命名空间中收到完整错误。

这是我的代码示例

    <!--    -->   

在这里提供帮助是我的项目文件的一部分与我的参考

   packages\MvvmLightLibs.4.2.30.0\lib\net45\GalaSoft.MvvmLight.Extras.WPF45.dll   packages\MvvmLightLibs.4.2.30.0\lib\net45\GalaSoft.MvvmLight.WPF45.dll   packages\CommonServiceLocator.1.0\lib\NET35\Microsoft.Practices.ServiceLocation.dll     packages\MvvmLightLibs.4.2.30.0\lib\net45\System.Windows.Interactivity.dll        4.0     

为了完成,我想告诉你我安装了Blend但从未打开或使用它。

这是XAML中交互性的正确名称空间:

 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 

您需要为驻留在不同程序集中的名称空间提供程序集名称。 像这样声明名称空间:

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

首先,添加MVVM Light NuGet包,它将添加对System.Windows.Interactivity.dll的引用

但是,有时,当您添加新的NuGet包时,可能会引入一个冲突版本的System.Windows.Interactivity.dll

这可以防止项目工作。

要修复此问题,请通过编辑app.config来添加程序集绑定重定向,如下所示:

               

不要担心更改PublicKeyToken ,它在所有版本中都是常量,因为它取决于.dll的名称,而不是版本。

确保将newVersion中的appConfig与最终指向的实际版本相匹配:

在此处输入图像描述

还可以选择使用Blend for Visual Studio本身在需要时添加所有必需的引用。 您只需在Blend中打开解决方案,然后导航到要添加Blend行为的视图文件。 打开视图后,您必须从“解决方案资源管理器”切换到“资源”选项卡,选择“行为”并双击想要的操作,例如CallMethodAction。 Blend将自动添加对System.Windows.InteractivityMicrosoft.Expression.Interactions ,XML名称空间的引用,并生成XAML代码。 您必须在Blend中保存更改的文件,切换到Visual Studio并重新加载解决方案以应用更改。