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

Posted

技术标签:

【中文标题】如何将 System.Windows.Interactivity 添加到项目中?【英文标题】:How to add System.Windows.Interactivity to project? 【发布时间】:2012-01-11 17:04:34 【问题描述】:

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

【问题讨论】:

对于 Visual Studio 2019,请查看 ***.com/a/65701484/3088349 【参考方案1】:

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

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

    删除对“Microsoft.Expression.Interactions”和“System.Windows.Interactivity”的引用 安装Microsoft.Xaml.Behaviors.Wpf NuGet 包。 XAML 文件 – 将 xmlns 命名空间 http://schemas.microsoft.com/expression/2010/interactivity 和 http://schemas.microsoft.com/expression/2010/interactions 替换为 http://schemas.microsoft.com/xaml/behaviors C# 文件 - 将 c# 文件“Microsoft.Xaml.Interactivity”和“Microsoft.Xaml.Interactions”中的使用替换为“Microsoft.Xaml.Behaviors”

【讨论】:

这是——现在——绝对正确的答案。我很高兴微软终于做到了。感谢您发布它。我不确定我是如何错过博客条目的。应该有“酷,新的 Microsoft NuGet 包”的时事通讯。 如果 *** 有情绪,我会用 hart 来回答你的问题 应该是 2019 年的选择答案。感谢您花时间添加此重要更新。 为我工作。我从 2015 年开始在 VS2019 上更新了解决方案。谢谢。 此外,如果您使用schemas.microsoft.com/expression/2010/drawing 中的任何形状,您可以使用this nuget package - 无需更改代码。【参考方案2】:

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

它曾经在Blend SDK 中(已弃用)。 如需迁移,请参阅Jan's answer 了解更多详情。

【讨论】:

该版本是否与 .Net Framework 4.6.1 兼容? 不兼容 4.6 ! 很伤心,让我很生气。出于这个原因,我很遗憾地使用了后面的代码。为 MS 感到羞耻。 @alerya: 1. 如果你真的愿意,你可以完全自己编写那个 SDK 的行为。 2.你试过nu-get包吗? 我知道这对你们中的一些人来说是显而易见的,但您需要参考的是:xmlns:i="http://schemas.microsoft.com/xaml/behaviors" 而不是:xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity",就像我见过的所有其他示例一样。【参考方案3】:

有一个新的 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/

【讨论】:

请注意,这个包不是微软官方发行版 如果您已经安装了 MVVM Light,它将引入一个冲突版本的System.Windows.Interactivity。要解决,请参阅我上面的答案。【参考方案4】:

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

http://www.nuget.org/packages/System.Windows.Interactivity.WPF/

【讨论】:

请注意,此软件包不是 Microsoft 官方发行版【参考方案5】:

使用 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 与现有项目一起使用以添加使用交互命名空间的功能。在这种情况下,Blend 会自动添加引用。

【讨论】:

这有助于修复我的项目。使用 Visual Studio 2017,我们必须进入 Visual Studio Installer 并在单个组件(SDK 类别)中找到它。【参考方案6】:

有时,当您添加新库时,会引入 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 与您最终指向的实际版本相匹配:

【讨论】:

你在这里做了完全相同的帖子,***.com/questions/13514027/… 多点:)【参考方案7】:

替代解决方案是在 Visual Studio 安装程序中修改您当前的 Visual Studio 安装 Win+R @987654324 @ 在“SDK、库和框架”下添加 Blend for Visual Studio SDK for .NET“单个组件”:

添加此组件后System.Windows.Interactivity 应出现在其常规位置Add Reference/Assemblies/Extensions


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

【讨论】:

我没有出现 :( 我也没有出现。使用 VS 2019 @BarışAkkurt 检查此答案是否适用于 Visual Studio 2019 ***.com/a/65701484/3088349【参考方案8】:

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

后果,我无法在我的解决方案中构建项目,并在项目的不同 XAML 部分重复出现类似错误:

XML 命名空间中不存在标记“Interaction.Behaviors” 'clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity'。

上述错误快照示例

解决方案,我解决它的方法是安装微软的Microsoft Expression Blend Software Development Kit (SDK) for .NET 4。

感谢我的同事@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 文件夹。

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

【讨论】:

【参考方案9】:

它在 MVVM Light 中,从 MVVM Light Download Page 获取。

【讨论】:

最佳解决方案。补充:使用nugetInstall-Package MvvmLightLibs -Version 5.3.0【参考方案10】:

我是通过 Prism.WPF NuGet-Package 获得的。 (包括 Windows.System.Interactivity)

【讨论】:

【参考方案11】:

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

【讨论】:

【参考方案12】:

我在使用 Visual Studio 2019 时遇到以下错误:

System.Windows.Markup.XamlParseException: '无法加载文件或程序集 'System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其之一依赖项。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常: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:
<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>

【讨论】:

以上是关于如何将 System.Windows.Interactivity 添加到项目中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将Ios文件上传到

Qt如何将文字变成图片?

如何将Bitmap保存为本地图片文件?

在MATLAB中如何将图导出

ASP如何将SQLSERVER数据导出到DBF(VF)

如何将CSV格式转换成JSON格式