2012-08-06 4 views
1

내 응용 프로그램에서 팝업을 사용하여 사용자 지정 메시지 상자 (다른 배경색)를 만들었습니다. 거기에 버튼이 있고 버튼 클릭 이벤트를 구현했습니다.팝업창이있는 Windows phone7 사용자 지정 메시지 상자

버튼 클릭에는 메시지 상자가 있으며 "확인"또는 "취소"에 따라 이후부터 작업을 수행합니다.

팝업 (사용자 지정 메시지 상자)에서 단추를 클릭하면 메시지 상자가로드되지만 여전히 팝업 (사용자 지정 messegebox)이 백그라운드에서 나타납니다. 전적으로 닫고 작업을 수행하기 위해 사용자 정의 팝업이 필요합니다. 따라서 버튼 클릭 내에서 첫 번째 문으로 popup.IsOpen = false;을 사용했지만 여전히 전체 버튼 클릭 이벤트가 끝날 때까지 배경에 나타납니다. 다른 속성을 검색했지만 작동하지 않았습니다.

다음

코드

 Popup popup = new Popup(); 
     popup.Height = 300; 
     popup.Width = 480; 
     popup.VerticalOffset = 100; 
     CustomMessageBox control = new CustomMessageBox(); 
     popup.Child = control; 

     popup.IsOpen = true; 
     this.IsEnabled = false; 

     control.OK_BTN.Click += (s, args) => 
     { 
      popup.IsOpen = false; 
      this.IsEnabled = true; 

      MessageBoxResult result = MessageBox.Show("Do you want to reset the settings ?", "Settings", MessageBoxButton.OKCancel); 

       if (result == MessageBoxResult.OK) 
       { 
        changeSettings(); 
       } 
     }; 

이 매우 인정된다 달성 없음을 제안한다. 감사...!!!

답변

2

사용자가 돌아올 때까지 차단되는 UI 스레드에서 이러한 현상이 일어나기 때문입니다. 버튼 핸들러가 반환 될 때까지는 UI 업데이트가 발생하지 않습니다. 당신이 정말로 팝업이 먼저 사라하려면

, 당신은 당신의 단추 처리기 돌아 오면 열 수 메시지 박스를 강제

 control.OK_BTN.Click += (s, args) => 
     { 
      popup.IsOpen = false; 
      this.IsEnabled = true; 

      Dispatcher.BeginInvoke(() => 
       { 
        MessageBoxResult result = MessageBox.Show("Do you want to reset the settings ?", "Settings", MessageBoxButton.OKCancel); 

        if (result == MessageBoxResult.OK) 
        { 
         changeSettings(); 
        } 
       }); 
     }; 

같은 것을 할 필요가있다. 하지만 팝업을 먼저 사라지게 하시겠습니까? 사용자가 메시지 상자에서 취소를 클릭하면 어떻게됩니까? 일반적으로 메시지 상자는 호출 된 항목 위에 직접 나타나며이를 대체하지 않습니다.

+0

위대한 ... 그것은 내가 원하는 것입니다. 고맙습니다 ... – JibW

+0

취소 button_click 구현은 별도로 수행 할 것이며 거기에서이 논리를 사용하지 않을 것입니다. 큰... – JibW

1

나는 Negative Eddy가 쓴 내용을 타이핑하고있었습니다.

Dispatcher.BeginInvoke를 사용하면 효과적입니다! 나는 그것을 테스트하고 완벽하게 작동합니다. 나는 그의 명백하게 논평 할 충분한 담당자가 없다.

관련 문제