2010-11-03 10 views
9

Come posso creare notifiche per le mie app WPF, come quelle sui browser dove mostrano i messaggi tramite una "barra degli strumenti" nella parte superiore del browser o una notifica di stile "MSN" tramite un popup che scorre su/giù su in basso a destra dello schermo. Forse un pannello che si apre e chiude al centro dell'app farà aNotifiche WPF

+1

In realtà stai facendo alcune domande diverse. Vuoi qualcosa che si trova nella finestra dell'applicazione (ad esempio, mostra un popup) o qualcosa che si trova nella barra delle applicazioni? –

+0

@Wonko the Sane, voglio qualcosa all'interno della finestra –

risposta

11

La tua domanda è un po 'vaga, in quanto con WPF, le tue opzioni qui sono davvero limitate solo dalla tua immaginazione.

Ecco alcune opzioni:

MessageBox
Questa è l'opzione più semplice - se si desidera informare l'utente con un semplice messaggio che egli deve riconoscere per continuare, poi basta mostrare un messaggio nella MessageBox.

rotolare il proprio dialogo
Se MessageBox fa non proprio farlo, e si desidera visualizzare più o diversi tipi di informazioni, allora si può semplicemente creare una nuova finestra, e aprirlo con il metodo ShowDialog(), costringendo l'utente a chiuderlo (riconoscerlo) prima di procedere.

StatusBar
Se si vuole semplicemente per trasmettere informazioni, si può semplicemente aggiungere un StatusBar alla parte inferiore del vostro dialogo. Mi sono collegato a un bell'esempio del collega SO'er Kent Boogaart. Nota che non sei limitato al solo testo in una StatusBar - puoi aggiungere qualsiasi UIElement ad esso, così puoi avere immagini, barre di avanzamento, qualsiasi cosa.

Some Other Pannello
Si potrebbe anche avere un altro pannello di qualche tipo (utilizzando il vostro esempio, uno StackPanel o qualcosa nella parte superiore della vostra applicazione) che ha visibilità impostato Compresso meno che non sia necessario. Si potrebbe anche avere, ad esempio, un bordo con un contenuto in esso, che si presenta di fronte al resto degli elementi utente nella finestra di dialogo. È possibile utilizzare un controllo PopUp.

Se si esegue il percorso "pannello aggiuntivo" (che forse suona più in linea con quello che si sta chiedendo), allora potrebbe essere utile fare alcuni trucchi con le animazioni per aggiungere solo un piccolo flash alla vostra app. Roba come far scorrere il pannello in posizione, o animare l'opacità, ecc. Se metti le informazioni sul resto del contenuto della finestra, puoi anche giocare con Opacity per rendere il pannello semitrasparente - abbastanza scuro da vedere e leggere , ma permette anche all'utente di vedere un po 'della finestra dietro di esso.

Ecco un esempio molto semplice di ciò che intendo. Lascio come esercizio per l'utente di aggiungere qualsiasi formattazione, animazioni chiazza di petrolio, gestire più messaggi, ecc

<Window ...> 
    <Grid x:Name="gridMainLayout"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 

     <StackPanel x:Name="stackNotificationArea" 
        Grid.Row="0" 
        Orientation="Horizontal" 
        Background="LemonChiffon" 
        Visibility="Collapsed"> 

      <TextBlock x:Name="txtMessage" 
         Text="{Binding NotificationMessage}" /> 
      <Button x:Name="btnAcknowledge" 
        Content="Acknowledge" /> 
     </StackPanel> 

     <!-- Rest of your window goes here --> 
     <Grid x:Name="gridContent" 
       Grid.Row="1"> 

       <!-- Content of window --> 

     </Grid> 

</Window> 

Nell'esempio di cui sopra, suppongo che ci sia una proprietà chiamata NotificationMessage che restituisce l'ultimo messaggio di notifica. Potresti hardcodificare questo in testo o altro. Probabilmente sarebbe meglio associare anche la Visibilità di StackPanel, in base al caso in cui ci fossero delle notifiche. In ogni caso, dovrai accendere lo StackPanel in Visibile se necessario. Impostandolo su Visibile si sposterà automaticamente il contenuto della finestra, come descritto.

Assicurarsi di impostare Visibilità su Comprimi al riconoscimento del messaggio. Se lo imposti su Nascosto, StackPanel non verrà mostrato, ma l'immobile sarà comunque trattenuto per questo (cioè ci sarà uno spazio vuoto nella parte superiore della tua applicazione).

Ovviamente, puoi essere tanto elegante quanto devi essere qui: potresti avere una piccola casella di riepilogo con tutti i messaggi o un paio di pulsanti per scorrere i messaggi o un pulsante per aprire una finestra con tutti i messaggi oppure ...

+0

Penso che la barra di stato sia unidirezionale, penso che una delle migliori implementazioni di ciò che voglio è come i browser di notifica quando bloccano i popup. Come potrei implementarlo in WPF? Penso che sia possibile solo bisogno di aiuto per iniziare. Immagino di dover prima scorrere le notifiche dalla parte superiore della finestra. Quando ciò accade, penso che sia meglio che anche il contenuto della finestra scorra. Mi piace anche che le notifiche siano in grado di impilare in qualche modo, ad esempio quando ci sono più di 1 notifiche da mostrare. –

+0

Mi piacerebbe che le notifiche fossero discrete, quindi i dialoghi non sono proprio ciò che voglio qui, sono sicuramente facili da implementare –

+0

Aggiornerò la mia risposta un po 'per iniziare, ma non posso progettare l'intera app per te ... –