You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WPF后台代码中设置Interaction交互行为

问题原因与解决方案

崩溃问题的根源

你之前在Notify.cs的Loaded事件中写的代码本身逻辑定位就有问题:

  • 你最初的XAML代码中,RebuildBehavior是附加到Window对象上的,而你在Notify的Loaded事件里调用Interaction.GetBehaviors(this)时,this指代的是Notify控件实例,相当于把行为附加到了错误的宿主对象上。
  • 你遇到的System.Resources.MissingManifestResourceException不是真的缺少资源文件,本质是RebuildBehavior内部限制了宿主必须为Window类型,或者行为内部逻辑不支持附加到Notify控件,底层抛出异常时找不到对应本地化资源字符串才触发了这个报错。

移到Window.Loaded后行为不生效的解决

你迁移后的代码赋值逻辑错误:你的XAML中RebuildBehavior的Element属性绑定的是名为Not的Notify控件,而你后台代码写的是behavior.Element = this;,这里的this是Window实例,和XAML的逻辑不一致,自然不会生效。

正确的后台实现代码

在Window的Loaded事件中编写如下代码即可:

RebuildBehavior behavior = new RebuildBehavior();
// Element属性赋值为Notify控件实例,此处直接用你XAML里定义的x:Name="Not"的控件对象
behavior.Element = this.Not;
// 行为附加到Window对象上,和XAML逻辑一致
Interaction.GetBehaviors(this).Add(behavior);

额外排查点

如果修改后还是不生效,可以按以下顺序排查:

  • 打断点确认RebuildBehavior的OnAttached方法被正常触发
  • 确认你引用的Interaction类来自Microsoft.Xaml.Behaviors命名空间,旧的System.Windows.Interactivity在.NET Core/.NET 5+环境下存在兼容性问题
  • 如果你是自定义的RebuildBehavior,确认Element是依赖属性,普通CLR属性赋值后不会触发属性变更回调,行为内部的初始化逻辑不会执行,需要把Element改为依赖属性,或者赋值后手动调用行为的初始化方法。

内容的提问来源于stack exchange,提问作者user16474396

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:54:03