이벤트를 사용하여 OnVisualParentChanged 메서드를 재정의하지 않고 FrameworkElement의 시각적 부모가 변경 될 때 알림을받을 수있는 방법이 있습니까?부모가 WPF에서 변경됨
Here은 "로드 됨"이벤트를 사용하는 것이지만 안전하지는 않습니다.
시각적 부모가 변경/변경 될 때 확실히 발생하는 이벤트가 있습니까?
이벤트를 사용하여 OnVisualParentChanged 메서드를 재정의하지 않고 FrameworkElement의 시각적 부모가 변경 될 때 알림을받을 수있는 방법이 있습니까?부모가 WPF에서 변경됨
Here은 "로드 됨"이벤트를 사용하는 것이지만 안전하지는 않습니다.
시각적 부모가 변경/변경 될 때 확실히 발생하는 이벤트가 있습니까?
이것은 다소 OnVisualParentChanged
과 관련이 있습니다. FrameworkElement.cs 구현에서는 private void TryFireInitialized()
을 호출하고 protected virtual void OnInitialized(EventArgs e)
을 호출하므로 거기에 연결할 수 있습니다.
알 필요가있는 정보에 따라 다릅니다. 내가 말할 수있는 한, 부모가 변경 중이며 이전 부모에 액세스 할 수 있다는 사실을 알리는 유일한 곳은 OnVisualParentChanged입니다 (이전 부모가 매개 변수로 전달됨). 그렇지 않으면 당신이 갈고리 할 다른 곳은 이미 바뀌었기 때문에 새로운 부모에만 접근 할 수 있습니다.
FrameworkElement를 상속하는 일부 클래스를 조사하여 도움이되는 추가 속성이나 메서드가 있는지 살펴볼 수도 있습니다.
'TryFireInitialized()'는'OnInitialized' 만 한 번만 시작합니다. – HerpDerpington
@ user1574054 당신은 절대적으로 맞습니다. –
내 테스트에서로드 됨 언로드는 부모 변경시 해고 될 수 있으므로 회신해도 안전하다고 말합니다. 그러나 OnVisualParentChanged (_Unloaded가 VisualParent라고 불릴 때 이미 null 인 경우)를 연결하면 이전 부모에만 액세스 할 수 있습니다. OnVisualParentChanged를 무시하면 매우 간단합니다.
void _Loaded(object sender, RoutedEventArgs e)
{
DoSmthng();
}
void _Unloaded(object sender, RoutedEventArgs e)
{
DoSmthngElse();
}
protected override void OnVisualParentChanged(DependencyObject oldParent)
{
DoSmthngOther();
// Call base class to perform standard event handling.
base.OnVisualParentChanged(oldParent);
}
정확히 무엇을해야하는지 잘 모르겠지만 모든 작업이 완료 될 때까지 기다릴 것이 필요한 경우 IsVisibleChanged 이벤트를 사용합니다. – jugg1es