C# WPF行为AssociatedObject为空
我正在控件上设置一个行为(在xaml中),该行为包含以下代码: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
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。关于两个建议的解决方案,请参见的答案。