如何向项目中添加 System.Windows.Interactivity?

我的项目缺少 System.Windows.Interactivity。谷歌说我必须安装 Expression Blend,但是在我的另一台电脑上我有这个库,但是我没有安装 Expression Blend。那么应该有另一种方法来获得 System.Windows.Interactivity?我该怎么办?(现在我没有另一台电脑,所以我不能只是复制这个图书馆:)

179653 次浏览

行为的官方包是 强 > Microsoft.Xaml.Behaviors.Wpf

它曾经是在 混合 SDK(已废弃)。
如果需要迁移,请参阅 简的回答了解更多细节。

最简单的方法可能是从 NuGet 获得:

Http://www.nuget.org/packages/system

有一个新的 NuGet 包,其中包含 System.Windows.Interactivity.dll,它与以下内容兼容:

  • WPF 4.04.5
  • Silverlight 4.05.0
  • Windows Phone 7.1,8.0
  • 视窗商店8,8.1

要安装 Expression.Blend.Sdk,请在包管理器控制台中运行以下命令

PM> Install-Package Expression.Blend.Sdk

Http://www.nuget.org/packages/expression 混合 Sdk/

它在 MVVM 轻,从 轻量级下载页得到它。

有时,当您添加一个新库时,会引入一个冲突版本的 System.Windows.Interactivity.dll

例如,NuGet 包 MVVM light可能需要 System.Windows.Interactivity.dll的 v4.2,但 NuGet 包 Rx-XAML可能需要 System.Windows.Interactivity.dll的 v4.5。这将阻止该项目的工作,因为无论您包括哪个版本的 System.Windows.Interactivity.dll,其中一个库将拒绝编译。

要解决这个问题,可以通过编辑 app.config来添加一个 Assembly Binding Redirect,如下所示:

<?xml version="1.0"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Windows.Interactivity"
publicKeyToken="31bf3856ad364e35"
culture="neutral"/>
<bindingRedirect oldVersion="4.0.0.0"
newVersion="4.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
<appSettings>
<add key="TestKey" value="true"/>
</appSettings>
</configuration>

不要担心更改 PublicKeyToken,这在所有版本中都是常量,因为它取决于。Dll,不是版本。

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

enter image description here

使用从2013版本开始包含在 VisualStudio 中的 为 VisualStudio 混合,您可以在以下文件夹中找到 DLL:

C:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.5\Libraries

不过,您必须自己添加对 System.Windows.Interactivity.dll的引用,除非您在现有项目中使用 Blend for Visual Studio 来添加使用 Interactivity 命名空间的功能。在这种情况下,Blend 将自动添加引用。

我是通过 Prism.WPF NuGet-Package (包括 Windows.System.Interactive)得到它的

另一种解决方案是在 Visual Studio 安装程序 < br > < br > Win + R %ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vs_installer.exe中安装 修改

在“ SDK、库和框架”下添加 Blend for Visual Studio SDK for .NET“个人组件”:

enter image description here 在添加这个组件后,System.Windows.Interactivity应该出现在它的常规位置 Add Reference/Assemblies/Extensions


这似乎只适用于 VS2017或更早的版本。对于以后的版本,请参考其他答案。

虽然这个问题很老了,但我认为这是相关的新闻/最新的答案: 微软开源的 XAML 行为,并发布了一篇博客文章如何更新到这个版本: https://devblogs.microsoft.com/dotnet/open-sourcing-xaml-behaviors-for-wpf/

为了节省您的点击次数,以下是迁移的主要步骤:

  1. 删除对“ Microsoft.Expression.Interactions”和“ System.Windows.Interactivity”的引用
  2. 安装 微软。 Xaml。行为 NuGet 包。
  3. XAML 文件-将 xmlns 名称空间 http://schemas.microsoft.com/expression/2010/interactivityhttp://schemas.microsoft.com/expression/2010/interactions替换为 http://schemas.microsoft.com/xaml/behaviors
  4. C # files-替换 c # files 中的用法“ Microsoft。赛姆。互动性”和“微软。Xaml.与微软的互动。赛姆。行为”

如果你使用的是 MVVM Light,你必须使用 System.Windows.Interactivity Version 4.0(NuGet。Dll 不工作) ,你可以在下面找到:

PathToProjectFolder\Software\packages\MvvmLightLibs.5.4.1.1\lib\net45\System.Windows.Interactivity.dll

只需手动添加这个. dll 作为参考,就可以了。

我在一个解决方案中遇到过完全相同的问题,即 Visual Studio 2019中的一个项目需要 System.Windows.Interactivity,我试图从 Visual Studio 2019中安装 Blend for Visual Studio SDK for .NET个人组件,但它不存在于其中。

这样做的后果是,我无法在解决方案中构建项目,因为在项目的不同 XAML 部分会重复出现类似的错误:

在 XML 命名空间中不存在标记“ Interaction.Behavior” “ clr-名称空间: System. Windows. Interactivity; Assembly = System. Windows. Interactivity”。

Image with all errors 上面提到的错误快照示例

我解决这个问题的方法是从 Microsoft 安装 微软针对.NET 4的表达式混合软件开发工具包(SDK)

感谢我的同事@felza,提到 System.Windows.Interactivity需要这个 sdk,它应该位于这个文件夹中:

C:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0

在我的情况下,它没有安装。我有这个文件夹 C:\Program Files (x86)\Microsoft SDKs没有 Expression\Blend\.NETFramework\v4.0文件夹里面。

安装之后,所有错误都消失了。

我在使用 VisualStudio2019时出现了以下错误:

系统。窗户。加价。“无法加载文件或汇编”系统。窗户。交互性,版本 = 4.5.0.0,文化 = 中性,PublicKeyToken = 31bf3856ad364e35’或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT T: 0x80131040例外)’

我们的项目使用 packages.config,并且有对 MVVMLightLibs 5.4.1.1System.Windows.Interactivity.WPF 2.0.20525的 NuGet 引用。

在其他一些答案的指导下,我意识到问题在于 MVVMLight 使用的 DLL 版本和我们项目使用的版本之间的冲突。解决办法是:

  • 删除对 System.Windows.Interactivity的 NuGet 引用。
  • 增加了对 packages\MvvmLightLibs.5.4.1.1\lib\net45\System.Windows.Interactivity.dll的引用。
  • 向 app.config 添加一个绑定重定向(在我们的示例中是 update) :
<dependentAssembly>
<assemblyIdentity name="System.Windows.Interactivity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly>