2014-12-04 3 views
0

null의 경우, 동작은 다음과 같은 코드가 있습니다 : OnMycontrolLoaded 메서드가 호출됩니다 (즉, Control/AssociatedObject가로드 됨). 그러나 AssociatedObject는 null입니다.WPF 동작 AssociatedObject 내가 내 컨트롤 (XAML에서)에 동작을 설정하고있어

왜 그런가?

+0

'OnDetached'가 전에 호출되었을 가능성이 있습니까? 컨트롤이 UI에 표시되거나 코드에서 참조됩니까? –

+0

이벤트가 OnDetaching (편집 된 게시물 참조)에서 등록 취소되면 컨트롤이 UI에 표시됩니다. –

+0

동작을 생성하고 첨부하는 xaml/코드를 추가 할 수 있습니까? –

답변

1

AssociatedObject가 참조되는 위치를 찾아야합니다. 여기 http://www.reflectionit.nl/Blog/2013/windows-8-xaml-tips-creating-blend-behaviors

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; } 
    } 
} 

봐.

+0

그리고 뭐라구? 이것은 AssociatedObject의 원래 문제에 어떻게 대답합니까? – AndyUK

+0

그렇지 않습니다. 이 상황은 비헤이비어의 데이터 바인딩 된 속성에 null이 아닌 값이 있고 * 해당 비헤이비어가 템플릿에서 사용되는 경우에 발생하는 것으로 보입니다. 제 의견으로는 버그입니다. 제안 된 두 가지 해결책은 http://stackoverflow.com/questions/5541702/dependencyobject-associatedobject-is-always-null에 대한 답변을 참조하십시오. –