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


106

我的项目不见了System.Windows.Interactivity。Google表示我必须安装Expression Blend,但是在另一台计算机上,我有此库,没有安装Expression Blend。那么应该有另一种获取方式System.Windows.Interactivity吗?我该怎么办?(现在我没有另一台计算机,所以我不能只复制此库:)

Answers:


92

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

它曾经在Blend SDK中使用,已过时。如果需要迁移,
请参阅Jan的答案以获取更多详细信息。


2
与4.6不兼容!
alerya '16

3
很伤心,让我发疯。出于这个原因,我不幸地在后面使用了代码。对MS感到羞耻。
alerya '16

1
@alerya:1.如果您确实愿意,您可以完全编写该SDK的行为。2.您是否尝试过nu-get软件包?
HB

1
@Shimmy:当然可以!
HB

6
我知道这对你们中某些人来说是显而易见的,但您需要参考的是:xmlns:i="http://schemas.microsoft.com/xaml/behaviors"不是: xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"就像我所看到的其他每个例子一样。
Yosef Bernal

124

尽管此问题已经很久了,但我认为这是相关新闻/最新答案:Microsoft开放源代码的XAML行为,并在博客中发布了如何更新到此版本:https : //devblogs.microsoft.com/dotnet/open为WPF采购Xaml行为/

为了节省您的点击时间,这是迁移的主要步骤:

  1. 删除对“ Microsoft.Expression.Interactions”和“ System.Windows.Interactivity”的引用
  2. 安装Microsoft.Xaml.Behaviors.Wpf NuGet程序包。
  3. XAML文件-取代的xmlns命名空间http://schemas.microsoft.com/expression/2010/interactivityhttp://schemas.microsoft.com/expression/2010/interactionshttp://schemas.microsoft.com/xaml /行为
  4. C#文件–将C#文件“ Microsoft.Xaml.Interactivity”和“ Microsoft.Xaml.Interactions”中的用法替换为“ Microsoft.Xaml.Behaviors”

6
这绝对是正确的答案。我很高兴微软终于做到了。感谢您发布。我不确定我是如何错过博客条目的。应该有一个“很酷,新的Microsoft NuGet软件包”的新闻通讯。
skst,

1
如果有#1的情绪,我会用一个鹿的回答
易卜拉欣凯斯卡布易卜拉欣

1
应该是截至2019年的选定答案。感谢您抽出宝贵时间来添加此重要更新。
分钟

1
为我工作。我从2015年开始在VS2019上更新了解决方案。谢谢。
库拉金

1
此外,如果您使用schemas.microsoft.com/expression/2010/drawing中的任何形状,可以使用此nuget包 -无需更改代码。
Daniel Elkington

59

有一个新的NuGet软件包,其中包含与以下系统兼容的System.Windows.Interactivity.dll:

  • WPF 4.0、4.5
  • Silverligt 4.0、5.0
  • Windows Phone 7.1、8.0
  • Windows应用商店8、8.1

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

PM> Install-Package Expression.Blend.Sdk

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


10
请注意,该软件包不是Microsoft的官方发行版
piers7,2015年

2
如果您已经安装了MVVM Light,它将引入的冲突版本System.Windows.Interactivity。要解决,请参阅上面的答案。
Contango


19

使用Blend for Visual Studio(从2013版开始包含在Visual Studio中),您可以在以下文件夹中找到DLL:

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

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


7
这有助于修复我的项目。使用Visual Studio 2017,我们必须进入Visual Studio安装程序并在单个组件(SDK类别)中找到它。
PRouleau '17

18

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

例如,NuGet软件包MVVM light可能需要v4.2 版本System.Windows.Interactivity.dll,但NuGet软件包Rx-XAML可能需要v4.5版本System.Windows.Interactivity.dll。这将导致项目无法正常工作,因为无论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>

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

请确保你符合newVersionappConfig到你最终指向的实际版本:

在此处输入图片说明


您在此处做了完全相同的帖子,stackoverflow.com
questions/13514027/…

14

另一种方法是修改当前的Visual Studio安装在Visual Studio安装

Win+ R %ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vs_installer.exe

添加Blend for Visual Studio SDK for .NET下“的SDK,库和框架”“个人成分”:

在此处输入图片说明 添加后该组件System.Windows.Interactivity应出现在其常规位置Add Reference/Assemblies/Extensions


看来这仅适用于VS2017或更早版本。对于更高版本,请参考其他答案。


2
没有出现在我身上:(
朱利安

也不出现在我身上。使用VS 2019
巴里斯Akkurt



0

如果您使用的是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作为参考,就可以了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.