如何将 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.1
和 System.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 添加到项目中?的主要内容,如果未能解决你的问题,请参考以下文章