【问题标题】:Can use Blend SDK classes in code but not XAML (Prism Desktop)可以在代码中使用 Blend SDK 类,但不能使用 XAML(Prism 桌面)
【发布时间】:2023-10-28 08:19:01
【问题描述】:

我正在尝试使用绑定到 WPF 窗口中的控件的CallMethodAction,使用 Prism 库示例和文档中的方法。出于某种原因,XAML 编译器拒绝承认 Microsoft.Expression.Interactivity.Core 命名空间甚至存在。但是,在该视图的代码隐藏中使用来自相同命名空间的相同类没有问题。

在 XAML 中,我尝试了两种规范命名空间:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ic="http://schemas.microsoft.com/expression/2010/interactions"

以及 CLR 命名空间:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ic="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"

命名空间 Intellisense 弹出式浏览器显示第一个命名空间,但不显示第二个命名空间的 XML 和 CLR 命名空间。无论哪种情况,以下 XAML 都无法编译:

<Button HorizontalAlignment="Right" Content="Cancel">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <ic:CallMethodAction />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

找到Interaction.Triggers标签没有问题,但抱怨CallMethodAction标签在指定的命名空间中不存在。事实上,ic 命名空间标签上的 Intellisense 就像没有这样的命名空间一样。但是,我确实没有收到找不到 CLR 命名空间的错误,如果我尝试使用不存在的命名空间,我会这样做。

但是,在这个窗口的构造函数中,我可以这样做:

var x = new Microsoft.Expression.Interactivity.Core.CallMethodAction();

编译并运行良好。这怎么可能?

【问题讨论】:

  • 您是否尝试过删除并重新添加对 Microsoft.Expression.Interactions.dll 的引用?
  • @surfen: 你需要*.Interactivity.dll...
  • @H.B.如果我不引用 Blend 程序集,我应该如何使用 Blend 类?
  • @surfen 确实修复了它!任何想法wtf发生了?您能否以答案的形式发布您的解释,以便我接受? :)
  • @MichaelEdenfield:我认为重新构建项目与阅读参考文献相同,您是对的,对于那些课程,您还需要Interaction

标签: c# wpf xaml prism expression-blend-4


【解决方案1】:

尝试删除并重新添加对Microsoft.Expression.Interactions.dll*.Interactivity.dll 的引用

这件事发生在我身上,但我不知道为什么。我就是这样解决的。

【讨论】:

    最近更新 更多