문제

나는 Silverlight 2에서 바닐라 날짜 피커를 사용하고 있습니다. 선택한 날짜를 값으로 바인딩하고 해당 값이 변경되면 메시지 상자를 팝하여 값을 변경하고 싶는지 확인합니다.

그러나 DatePicker의 값이 변경된 후 바로 MessageBox를 사용하면 이상한 동작이 발생합니다. DatePicker의 팝업은 닫히지 않으며 캘린더를 통해 마우스를 마우스를 클릭하지 않고 날짜를 선택합니다.

또한, 이후에는 바인딩에 영향을 미치는 것으로 보이며 페이지가 다시로드 될 때까지보기 모델의 속성을 다시 설정할 수 없습니다.

이 문제는 다소 구체적이므로 제거 된 예제를 첨부했습니다. 날짜를 선택하고 확인을 누른 다음 캘린더 위로 마우스를 이동하여이를 재현하십시오.

내 xaml-

<Grid x:Name="LayoutRoot">
    <controls:DatePicker x:Name="dpTest" 
                         Height="25" 
                         Width="75" 
                         SelectedDateChanged="DatePicker_SelectedDateChanged" />
</Grid>

내 코드 뒤에 -

  Private Sub DatePicker_SelectedDateChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs)
    MessageBox.Show("Test Popup")
End Sub

아이디어 나 해결 방법이 있습니까?

도움이 되었습니까?

해결책

흠 이것은 실제로 드문 일이 아닙니다. 내 동료는 최근 Windows Forms 애플리케이션에서 매우 이상한 문제를 겪었습니다. 제 3 자 메뉴 컨트롤의 클릭 이벤트에 대한 응답으로 MessageBox를 사용하고 있었기 때문에 메뉴가 기각되기 전에).

그를 위해 효과가 없었지만 당신에게 잘 작동 할 수있는 한 가지 제안은 발송자에게 전화를 "밀기"하는 것입니다. 그렇게하면 선택한 DATECHANGED 핸들러가 반환됩니다 ~ 전에 메시지 상자가 실제로 표시됩니다.

Private Sub DatePicker_SelectedDateChanged( ... )

    ' Unfortunately my VB is rusty '
    ' I believe this is the correct syntax. '
    Dispatcher.BeginInvoke(AddressOf ShowDateMessage)

    ' At this point, the message box has *not* been shown '
    ' It will be shown once control returns to the dispatcher '

End Sub

Private Sub ShowDateMessage()

    ' By this point, the DatePicker popup should be closed '
    ' so hopefully the issues you are seeing would be avoided '
    MessageBox.Show("Test Popup")

End Sub

명심해야 할 몇 가지 사항 :

  • MessageBox.Show는 Modal 대화 상자를 만드는 유일한 방법 중 하나라는 점에서 Silverlight에서 고유합니다. 메시지 루프가 여전히 실행중인 Windows 형태와 달리 Silverlight의 UI 스레드는 반환 될 때까지 정체됩니다.
  • 이벤트는 날짜가 변경 된 후에 이미 진행되므로 변경 사항을 확인하는 좋은 방법이 아닙니다. 문서를 한 눈에 볼 때 해당 "변경"이벤트가 없음을 시사합니다.
  • 상황에 따라 MessageBox 대신 Childwindow를 사용하는 것이 좋습니다. 이 문제는 모달 대화 상자 인 것처럼 보이기 때문에 설명한 문제가 없습니다.

다른 팁

나는 해결 방법을 블로그에 올렸다 여기 작업 흐름을 변경하여 메시지 상자를 불필요하게 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top