如何从 WPF 中的代码背后设置交互行为?

Posted

技术标签:

【中文标题】如何从 WPF 中的代码背后设置交互行为?【英文标题】:How to Set Interaction Behavior from Code Behind in WPF? 【发布时间】:2021-12-24 13:43:09 【问题描述】:

我对 Window 有如下行为

<Window>
    <my:Notify x:Name="Not"/>
    <behaviors:Interaction.Behaviors>
        <behavior:RebuildBehavior Element="Binding ElementName=Not" />
    </behaviors:Interaction.Behaviors>
<Window>

现在我想在后面的代码中编写这段代码,所以我使用了这段代码:

在 Notify.cs(加载事件)中:

RebuildBehavior behavior = new RebuildBehavior();
behavior.Element = this;
Interaction.GetBehaviors(this).Add(behavior);

但是我的应用在最后一行崩溃了Interaction.GetBehaviors(this).Add(behavior);

System.Resources.MissingManifestResourceException: '找不到 资源中的资源“ExceptionStringTable.resources”

我写的代码是否正确?

更新: 我将代码移至 window.cs(已加载事件)

RebuildBehavior behavior = new RebuildBehavior();
behavior.Element = Notify.Instance;
Interaction.GetBehaviors(this).Add(behavior);

崩溃已修复但无法正常工作

【问题讨论】:

我无法重现该问题。类似的代码确实适用于我的。一定是您没有在RebuildBehavior 中发布的内容。 你检查过来自What does MissingManifestResourceException mean and how to fix it?的所有案例 @Rekshino 我将代码移至 window.cs,现在修复了崩溃,但预期的行为不起作用 尝试创建minimal reproducible example 并发布新问题。 【参考方案1】:

以下代码相当于您的 XAML 标记:

public partial class MainWindow : Window

    public MainWindow()
    
        InitializeComponent();
        RebuildBehavior behavior = new RebuildBehavior();
        BindingOperations.SetBinding(behavior, RebuildBehavior.ElementProperty, 
            new Binding()  ElementName ="Not" );
        Interaction.GetBehaviors(this).Add(behavior);
    

【讨论】:

以上是关于如何从 WPF 中的代码背后设置交互行为?的主要内容,如果未能解决你的问题,请参考以下文章

如果样式已经设置,如何覆盖 WPF 子控件样式?

WPF学习第三十八章 行为

WPF如何获取和设置应用程序范围的资源

array[100] = 0 如何将整个数组设置为 0?

WPF学习第三十八章 行为

WPF背后的C#代码中的XPath