Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF行为AssociatedObject为空_C#_Wpf_Attachedbehaviors - Fatal编程技术网

C# WPF行为AssociatedObject为空

C# WPF行为AssociatedObject为空,c#,wpf,attachedbehaviors,C#,Wpf,Attachedbehaviors,我正在控件上设置一个行为(在xaml中),该行为包含以下代码: protected override void OnAttached() { base.OnAttached(); AssociatedObject.Loaded += OnMycontrolLoaded; AssociatedObject.Unloaded += OnMycontrolUnloaded; } private void OnMycontrolLoaded(object sender, Ro

我正在控件上设置一个行为(在xaml中),该行为包含以下代码:

protected override void OnAttached()
{
    base.OnAttached();

    AssociatedObject.Loaded += OnMycontrolLoaded;
    AssociatedObject.Unloaded += OnMycontrolUnloaded;
}

private void OnMycontrolLoaded(object sender, RoutedEventArgs e)
{
    AssociatedObject.MyEvent +=MyEventHandler;
}

protected override void OnDetaching()
{
    base.OnDetaching();

    AssociatedObject.Loaded -= OnMycontrolLoaded;
    AssociatedObject.Unloaded -= OnMycontrolUnloaded;
}    
当我创建多个控件实例时,会发生一些奇怪的事情:调用onmycontrolled方法(即加载控件/AssociatedObject),但其中AssociatedObject为null


为什么会这样

您应该查看关联对象的引用位置

public abstract class Behavior<T> : DependencyObject, IBehavior where T : DependencyObject {

    [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
    public T AssociatedObject { get; set; }

    protected virtual void OnAttached() {
    }

    protected virtual void OnDetaching() {
    }

    public void Attach(Windows.UI.Xaml.DependencyObject associatedObject) {
        this.AssociatedObject = (T)associatedObject;
        OnAttached();
    }

    public void Detach() {
        OnDetaching();
    }

    DependencyObject IBehavior.AssociatedObject {
        get { return this.AssociatedObject; }
    }
}
公共抽象类行为:DependencyObject,IBehavior其中T:DependencyObject{
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
公共T关联对象{get;set;}
受保护的虚拟连接(){
}
附加()上受保护的虚拟空{
}
公共无效附加(Windows.UI.Xaml.DependencyObject associatedObject){
this.AssociatedObject=(T)AssociatedObject;
附加的();
}
公共图书馆{
连接();
}
DependencyObject IBehavior.AssociatedObject{
获取{返回this.AssociatedObject;}
}
}

看这里。

以前有没有调用过
OnDetached
?控件是在UI中显示还是在代码中引用?如果在OnDetaching中未注册事件(请参阅编辑的文章),控件将显示在UI中。是否可以添加创建行为并附加行为的xaml/代码?是否可以确认AssociatedObject为null,但事件处理程序“sender”参数指向该对象?我似乎无法重现这一切,然后呢?这是如何解决空关联对象的原始问题的?它没有。这种情况似乎发生在行为的数据绑定属性具有非null值且该行为用于模板时,我认为这是一个bug。关于两个建议的解决方案,请参见的答案。