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

160

我的项目缺失System.Windows.Interactivity库。谷歌搜索结果显示我需要安装Expression Blend,但是我的另一台电脑上已经有这个库了,而且没有安装Expression Blend。那么获得System.Windows.Interactivity库的另外一种方法是什么呢?我该怎么办?(目前我没有另一台电脑可以复制这个库 :))


针对Visual Studio 2019,请查看以下链接:https://dev59.com/Ymsy5IYBdhLWcg3wtwa9#65701484 - Maytham Fahmi
13个回答

264
尽管此问题相当古老,但我认为这是相关的新闻/最近的答案:Microsoft 公开发布了 XAML Behaviours 的源代码,并发布了一篇博客文章介绍如何更新到此版本:https://devblogs.microsoft.com/dotnet/open-sourcing-xaml-behaviors-for-wpf/ 为了方便您,以下是迁移的主要步骤:
  1. 删除对“Microsoft.Expression.Interactions”和“System.Windows.Interactivity”的引用
  2. 安装Microsoft.Xaml.Behaviors.Wpf NuGet 包。
  3. XAML 文件 - 用http://schemas.microsoft.com/xaml/behaviors替换 xmlns 命名空间http://schemas.microsoft.com/expression/2010/interactivityhttp://schemas.microsoft.com/expression/2010/interactions
  4. C# 文件 - 在 c# 文件中将 using "Microsoft.Xaml.Interactivity" 和 "Microsoft.Xaml.Interactions" 替换为 "Microsoft.Xaml.Behaviors"

19
这现在绝对是正确答案。我很高兴微软终于做出了这个决定。感谢您发布这个。我不确定为什么错过了博客文章。应该有一个“酷新的Microsoft NuGet包”通讯。 - skst
3
如果 Stackoverflow 有情感,我会为你的回答使用一颗心。 - Ibrahim Kais Ibrahim
3
应该选择这个答案作为2019年的最佳答案。感谢您抽出时间添加这个重要更新。 - mins
2
对我有用。我将解决方案从2015年升级到VS2019。谢谢。 - KulaGGin
2
Prism.Wpf包仍然包含System.Windows.Interactivity。如果您使用Prism框架,则不需要使用Microsoft.Xaml.Behaviors.Wpf - Jeong Hansol
显示剩余8条评论

120

@VansFannel:不知道,好一阵子没用过了。 - H.B.
3
不兼容4.6版本! - alerya
4
这非常令人伤心并且让我感到愤怒。由于这个原因,我不得不遗憾地使用后端代码。微软真可耻。 - alerya
2
@alerya:1. 如果你真的想要,你完全可以自己编写那个SDK的行为。2. 你尝试过NuGet包吗? - H.B.
24
我知道这对你们中的一些人来说是显而易见的,但你需要引用的是:xmlns:i="http://schemas.microsoft.com/xaml/behaviors" 而不是在我看到的每个其他示例中都是 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" - Yosef Bernal
显示剩余3条评论

64

现有一个新的NuGet包含有System.Windows.Interactivity.dll文件,兼容于:

  • WPF 4.0、4.5
  • Silverlight 4.0、5.0
  • Windows Phone 7.1、8.0
  • Windows Store 8、8.1

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

PM> Install-Package Expression.Blend.Sdk

http://www.nuget.org/packages/Expression.Blend.Sdk/


13
请注意,此软件包不是微软官方发布的版本。 - piers7
2
如果您已经安装了MVVM Light,它会引入一个与System.Windows.Interactivity冲突的版本。要解决此问题,请参见上面的答案。 - Contango
如果您正在使用Caliburn.Micro(v 2),那么这就是正确的方法。 - Mark Bonafe

24

16
请注意,此软件包不是微软官方发行。 - piers7

22

使用Visual Studio 2013及以上版本附带的Blend for Visual Studio,你可以在以下文件夹中找到DLL文件:

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

除非您使用Visual Studio的Blend并带有使用Interactivity命名空间的现有项目以添加功能,否则您将不得不自己添加对System.Windows.Interactivity.dll的引用。在这种情况下,Blend将自动添加引用。


8
这帮助我修复了我的项目。在使用Visual Studio 2017时,我们需要进入Visual Studio Installer,并在个别组件(SDK类别)中找到它。 - PRouleau

19
有时候,当你添加新的库时,会引入一个与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文件,添加一个程序集绑定重定向,使其类似于以下内容:
<?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


你在这里发布了完全相同的帖子,https://dev59.com/zmYr5IYBdhLWcg3wpLr9 多个要点 :) - pix

16

另一种解决方法是在Visual Studio Installer中修改您当前的Visual Studio安装

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 应出现在其常规位置中 添加引用/程序集/扩展


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


3
对我来说看不到 :( - Julien
1
我也无法看到。使用VS 2019。 - Barış Akkurt
@BarışAkkurt,请查看这个关于Visual Studio 2019的答案 https://dev59.com/Ymsy5IYBdhLWcg3wtwa9#65701484 - Maytham Fahmi

6

我也遇到了同样的问题,解决方案是需要在Visual Studio 2019项目中使用System.Windows.Interactivity,我尝试从Visual Studio 2019个人组件中安装Blend for Visual Studio SDK for .NET,但是没有找到它。

这导致我的解决方案中的项目构建失败,并且我在项目中不同的XAML部分反复出现以下类似错误:

The tag 'Interaction.Behaviors' does not exist in XML namespace 'clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity'.

Image with all errors 上述错误的示例快照

解决方法是,我通过从Microsoft安装Microsoft Expression Blend Software Development Kit (SDK) for .NET 4,来解决这个问题。

感谢我的同事@felza提到需要此sdk,因为System.Windows.Interactivity需要该sdk,而该sdk应该位于以下文件夹中:

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

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

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


2

1
最佳解决方案。附加:使用NuGet Install-Package MvvmLightLibs -Version 5.3.0 - hdev

2

我是通过Prism.WPF NuGet包获取的。(它包括Windows.System.Interactivity)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接