2016-11-22 5 views
0

Я использую окно тостер, это основная часть XAML:Тостер Окно не закрывается в диспетчере задач

<Grid.Triggers> 
     <EventTrigger RoutedEvent="FrameworkElement.Loaded"> 
      <BeginStoryboard> 
       <Storyboard Completed="Storyboard_Completed"> 
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)" Duration="0:0:10" Completed="DoubleAnimationCompleted"> 
         <SplineDoubleKeyFrame KeyTime="0:0:0" Value="0"/> 
         <SplineDoubleKeyFrame KeyTime="0:0:0.5" Value="1"/> 
        </DoubleAnimationUsingKeyFrames> 
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)"> 
         <SplineDoubleKeyFrame KeyTime="0:0:2" Value="1"/> 
         <SplineDoubleKeyFrame KeyTime="0:0:12" Value="0"/> 
        </DoubleAnimationUsingKeyFrames> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 

В основном это называется с шоу метода, как это:

public new void Show() 
    { 
     this.Topmost = true; 
     base.Show(); 

     this.Owner = System.Windows.Application.Current.MainWindow; 
     this.Closed += this.NotificationWindowClosed; 
     var workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea; 

     this.Left = workingArea.Right - this.ActualWidth; 
     double top = workingArea.Bottom - this.ActualHeight; 
     foreach (Window window in System.Windows.Application.Current.Windows) 
     { 
      string windowName = window.GetType().Name; 

      if (windowName.Equals("NotificationWindow") && window != this) 
      { 
       window.Topmost = true; 
       top = window.Top - window.ActualHeight; 
      } 
     } 

     this.Top = top; 
    } 

Проблема заключается в том, что всплывающее окно «Уведомления» остается в качестве подзаголовка в диспетчере задач. Каждый раз, когда окна тостера открываются (и снова закрываются), добавляется запись. В XAML я уже добавил Completed = "DoubleAnimationCompleted" и (после другого сообщения в Stackoverflow) Storyboard Completed = "Storyboard_Completed">. Оба метода вызываются и exectute this.Close(), но всплывающие окна не отображаются на панели задач. Таким образом this.Close (каким бы то ни было образом называется), похоже, не очищает эти записи.

Что я могу сделать, чтобы это изменить?

ответ

0

Я, наконец, нашел ответ из образца, отправленного «CrashproofCode» в этом WPF 'Toaster' Popup - How to close?. После сравнения его код помоему я нашел 2 различия, которые вызвали мой код, чтобы оставаться на панели задач:

WindowStyle="None" AllowsTransparency="True" Background="Transparent" Closing="Window_Closing" 

Window_Closing называли и по-видимому, причиной этой проблемы:

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    if (!closeCompleted) 
    { 
     e.Cancel = true; 
    } 
} 

Он также имел в своем XAML :

ShowInTaskbar="False" 

и этого достаточно для предотвращения этого.

Смежные вопросы