2015-01-19 2 views
1

TaskbarIcon, 을 사용하여 WPF 응용 프로그램을 만들려고합니다. 트레이 바에서 아이콘을 클릭하면 Contextmenu 인 이 나타나고 "종료"를 선택하면 내가이 앱을 닫을 지 여부를 묻는 메시지 상자.WPF TaskbarIcon ContextMenu

여기 MessageBox가 올바르게 표시되지만 아무 버튼이나 클릭하기 전에 즉시 사라져서 디버거를 사용하여 "결과"값을 확인하면 항상 "아니오"라는 것을 알았습니다. 이전에이 문제가 발생 했습니까? 모든 단서는 인정 될 것입니다 !!

여기 내 .xaml 코드입니다 :

<tb:TaskbarIcon x:Name="WpfTaskIcon" IconSource="/Themes/Images/TimeSync.ico" 
        ToolTipText="Hello world" > 
<tb:TaskbarIcon.ContextMenu> 
<ContextMenu Background="LightCoral"> 
    <MenuItem Header="Exit" Click="Exit_Click" /> 
    <MenuItem Header="Second menu Item" /> 
</ContextMenu> 
</tb:TaskbarIcon.ContextMenu> 

그리고 여기 내 C# 코드입니다 :

private void Exit_Click(object sender, RoutedEventArgs e) 
{ 
    MessageBoxResult result = System.Windows.MessageBox.Show(
     "Message_ConfirmationOfExit", 
     "Title_Confirmation", 
     MessageBoxButton.YesNo); 
    if (result == MessageBoxResult.Yes) 
    { 
     this.Close(); 
    } 
} 

EDT : 내가 MainWindow를의 가시성을 초기화하려면이 옵션을 추가했습니다 :

private void MainWindow_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.Visibility = System.Windows.Visibility.Visible; 
    MessageBox.Show("MainWindow loaded"); 
    MessageBoxResult result = System.Windows.MessageBox.Show(
     "Message_ConfirmationOfExit", 
     "Title_Confirmation", 
     MessageBoxButton.YesNo); 
    if (result == MessageBoxResult.Yes) 
    { 
     this.Close(); 
    } 
} 

답변

0

다른 WPF 시나리오에서이 문제가 발생했습니다. 원인은 이며 아직 시작된 UI UI 스레드가 없습니다입니다. MessageBox() 또는 MsgBox() 또는 VB InputBox() (주 응용 프로그램의 첫 번째 양식이로드되기 전에 = 시작된 UI UI 스레드가없는) 호출하면 예상 된 대화 상자가 열리지 만 1 초 내에 사라집니다. 그러나, 그 자체로 실종 UI 스레드를 만듭니다 (나는 ... 모든 세부 사항을 확인하지 않았다) 동일한 코드의 반복 된 호출 메시지 상자가 더 이상 사라지지 않을 것이기 때문에.

해결책은 메시지 상자를 열기 전에 첫 번째 양식을 초기화 (일반적으로 기본 양식)하게하는 것이 었습니다. 보이지 않는 초기화도 계산됩니다.

체크리스트 질문 :

  • 이 응용 프로그램의 어떤 형태 (의로드 이벤트라는)로드?

해결 방법 (좋은 있지만 작동하지 않음) : 당신이 응용 프로그램의 큰 변화를위한 시간이 현재 시간을 저장 당신이 당신의 메시지 상자를 표시하기 전에하지 않는 경우 다시 내 응답을 얻는 경우 1500 밀리 초, 그 결과에 따라 행동하지 마라 (어쨌든 사용자가 아니 었음) 메시지 상자를 다시 표시하십시오.

+0

예! 조언과 힌트를 보내 주셔서 감사합니다. 그러나 "Exit_Click"을 호출하기 전에 "MainWindow_Loaded"에서 MainWindow의 가시성을 초기화하기 위해 세그먼트를 추가하고, 업데이트 한 코드가 주 입자에 표시됩니다. 힌트와 확인 메시지 상자가 모두 올바르게 표시되지만 "Exit_Click"의 확인 상자는 사라집니다 ... – Alanight

+0

@ Alanight - 다른 대안을 시도해 볼 수 있습니까? 메시지 박스 코드를'_Loaded'에 넣는 대신'_Shown'에 넣으십시오. – miroxlav

+0

MainWinow_Showen() 메서드를 추가하고 InitializeComponent()를 호출 한 직후에 MessageBox가 정상적으로 표시되었지만 문제가 여전히 존재합니다 ... 내 MainWindow_Showen 메서드는 다음과 같습니다. private void Main_Showen() { this.Visibility = System.Windows.Visibility.Visible; } – Alanight

관련 문제