【问题标题】:Visual Studio 2017 - What happened to Expression interactions?Visual Studio 2017 - 表达式交互发生了什么?
【发布时间】:2017-03-27 13:30:22
【问题描述】:

我广泛使用 Expression 交互的 CallMethodAction 以对 MVVM 友好的方式处理来自 XAML 的事件。

我刚刚在 VS2017 中创建了一个新的 WPF 项目,现在我看到旧的 Expression 命名空间已经消失了。我找到了this page on MSDN,这是我正在寻找的操作,但是在引用了该程序集并添加了它不包含 CallMethodAction 的命名空间之后。该页面适用于 Silverlight,这是 WPF,因此我担心该操作不再可用。

那么有谁知道它是否实际上已被删除/替换?现在应该如何在视图模型上调用事件处理程序?

(我确实知道 InvokeCommandAction,但我更喜欢 CallMethodAction,因为它中继原始事件参数,并允许取消预览事件。)

编辑:为了继续前进,我尝试了 InvokeCommandAction,但它的工作方式也不再相同,而且我找不到任何关于新用法的文档。

我确实为 Microsoft.Xaml.Interactions 命名空间找到了 this reference on MSDN,它似乎包含我需要的类,但该程序集似乎不存在。

我觉得我在这里遗漏了一些明显的东西。我不明白他们如何能够对响应事件这样基本的事情做出重大改变。

【问题讨论】:

  • 也许改变目标框架会有所帮助

标签: c# wpf mvvm visual-studio-2017


【解决方案1】:

使用 Visual Studio 2017 安装程序安装“Blend for Visual Studio SDK for .NET”,您可以在“单个组件”页面的“SDK、库和框架”标题下找到它。

【讨论】:

  • 这是推荐的解决方案
  • 是的,改变了我的答案,谢谢。我没有注意到这一点。
  • 解决了我的问题。我见过很多人使用 NuGet 包,但我更喜欢使用 Blend 附带的包。
【解决方案2】:

关于 2020 年的一点更新:

As mentioned by Jan in other question:

Microsoft 开源 XAML 行为并发布了 blog post 如何更新到此版本。

进行更新的步骤:

  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/interactions 替换为 http://schemas.microsoft.com/xaml/behaviors
  4. C# 文件 - 将 c# 文件“Microsoft.Xaml.Interactivity”和“Microsoft.Xaml.Interactions”中的使用替换为“Microsoft.Xaml.Behaviors”

【讨论】:

    【解决方案3】:

    CallMethodAction 在 Microsoft.Expressions.Interactions.dll 中定义。此程序集不是 .NET Framework 的一部分,但您可以使用 NuGet 下载它:https://www.nuget.org/packages/MicrosoftExpressionInteractions/

    InvokeCommandAction 类在 System.Windows.Interactivity.dll 程序集中定义:https://www.nuget.org/packages/System.Windows.Interactivity.WPF/

    【讨论】:

    • 链接的ExpressionInteractions是一个旧的非官方版本,我已经有最新的与VS2017 Enterprise捆绑在一起。关键是安装 System.Windows.Interactivity.WPF,它还安装了当前版本的 EI,并为我提供了熟悉的命名空间和功能。我以前一直只使用核心 System.Windows.Interactivity 程序集,从来不需要从 nuget 安装,所以我想这就是变化。谢谢!
    • 很抱歉追溯更改已接受的答案,但@nmarler 下面的解决方案实际上是正确的。
    • 我知道它很旧,但 .NET Framework 4.5 似乎无法正常工作,因为我已经测试了上面的 2 个 nuget。我推荐使用这个nuget.org/packages/Expression.Blend.Sdk/1.0.2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多