2011-05-13 2 views
3

App.xaml 리소스 내에 정의 된 팝업이 있습니다.App.xaml 리소스에 정의 된 팝업 사용 방법

<Application.Resources> 
     <Popup x:Key="popup"> 
      //some content here 
     </Popup> 
    </Application.Resources> 

이 방법으로 사용하고 싶습니다.

     Popup popup = this.Resources["popup"] as Popup; 
        popup.IsOpen = true; 

팝업이 표시되지 않는 이유는 무엇입니까? 어떤 도움을 주셔서 감사합니다.

답변

5

PopUp 및 그 내용을 App.xaml Resources에 정의하면 해당 페이지에 표시된 것과 다른 시각적 트리에 할당됩니다. IsOpen 속성을 실제 작업으로 설정하면 실제로 보이게하기에는 충분하지 않으므로 PopUp을 현재 시각적 트리에 추가해야합니다. PopUp에 이미 Parent이 있기 때문에 두 번째 문제가 발생합니다. InvalidOperationException이 생기기 때문에 페이지에 직접 추가 할 수 없습니다.

여기에 가능한 솔루션입니다 :

popup = App.Current.Resources["popup"] as Popup; 
App.Current.Resources.Remove("popup"); // remove the PopUp from the Resource and thus clear his Parent property 
ContentPanel.Children.Add(popup);  // add the PopUp to a container inside your page visual tree 
popup.IsOpen = true; 

이 방법은 더 이상 응용 프로그램의 리소스 사전 내에서의 참조가 없습니다 및이 방법에 대한 후속 호출을 시도하는 경우는 NullReferenceException이로 인해 실패 할주의 . 약간의 코드를 사용하여이 문제를 해결하고 팝업을 닫을 때 리소스에 다시 추가 할 수 있습니다.

popup.IsOpen = false; // 이전에 저장된 PopUp에 대한 로컬 참조 ContentPanel.Children.Remove (popup); // 현재 시각적 트리에서 제거 App.Current.Resources.Add ("popup", popup); // 리소스에 다시 추가하십시오.

이 코드가 작동하고 팝업이 올바르게 표시 될 수 있지만, 실제로는 PopUp에 대한 과장이라고 생각됩니다. 페이지 내에서 실제로 정의 할 수 있고 변경하면 IsOpen 속성

+0

도움 주셔서 감사합니다. –

관련 문제