2010-11-03 13 views
9

¿Cómo puedo crear notificaciones para mis aplicaciones WPF, como las de navegadores donde muestran mensajes mediante una "barra de herramientas" en la parte superior del navegador o una notificación de estilo "MSN" mediante una ventana emergente que se desliza hacia arriba o hacia abajo la parte inferior derecha de la pantalla. Tal vez un panel que se desvanece dentro o fuera del centro de la aplicación lo hará aWPF Notifications

+1

en realidad se está haciendo algunas preguntas diferentes. ¿Desea algo que esté dentro de la ventana de su aplicación (es decir, mostrar una ventana emergente) o algo que se encuentre en la bandeja del sistema? –

+0

@Wonko la Sane, quiero algo dentro de la ventana –

Respuesta

11

Su pregunta es un tanto vaga, con WPF, sus opciones aquí están realmente limitadas por su imaginación.

Estas son algunas opciones:

MessageBox
Esta es la opción más simple - si desea notificar a su usuario con un simple mensaje de que debe reconocer a seguir, a continuación, sólo mostrar un mensaje en una MessageBox.

liar diálogo
Si de mensaje no acaba de hacerlo, y que desea mostrar más o diferentes tipos de información, entonces usted puede simplemente crear una nueva ventana, y abrirlo con el método ShowDialog(), obligando al usuario a cerrarlo (confirmarlo) antes de continuar.

StatusBar
Si simplemente quiere transmitir información, puede simplemente añadir un StatusBar a la parte inferior del diálogo. He vinculado un buen ejemplo del compañero SO'er Kent Boogaart. Tenga en cuenta que no está limitado a solo texto en una Barra de estado; puede agregarle cualquier elemento UIE, de modo que podría tener imágenes, barras de progreso, lo que sea.

Algunos otro panel
Usted también podría tener otro panel de algún tipo (mediante su ejemplo, un StackPanel o algo en la parte superior de la aplicación) que tiene Visibilidad establecido en derrumbó a menos que sea necesario. También podría tener, por ejemplo, un borde con algo de contenido, que aparezca delante del resto de los elementos UIE en su cuadro de diálogo. Puede usar un control PopUp.

Si va por la ruta del "panel adicional" (que quizás suene más en línea con lo que está preguntando), entonces puede ser bueno hacer algunos trucos con animaciones para agregar un poco de flash a su aplicación. Cosas como deslizar el panel en su lugar o animar la opacidad, etc. Si está colocando la información sobre el resto del contenido de la ventana, también puede jugar con Opacidad para que el panel sea semitransparente, lo suficientemente oscuro para ver y leer , pero también permite al usuario ver un poco de la ventana detrás de él.

Aquí hay un ejemplo muy básico de lo que quiero decir. Lo dejo como ejercicio para el usuario añadir cualquier formato, animaciones mancha, maneje múltiples mensajes, etc.

<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> 

En el ejemplo anterior, supongo que hay una propiedad llamada NotificationMessage que devuelve la última mensaje de notificación. Podría codificar esto en texto o lo que sea. Probablemente sea mejor vincular la Visibilidad del StackPanel también, según si hubo alguna notificación. En cualquier caso, deberá alternar el StackPanel a Visible según sea necesario. Establecerlo en Visible moverá automáticamente el contenido de su ventana, como describió.

Asegúrese de establecer Visibilidad en Colapsado cuando se confirme el mensaje. Si lo configura en Oculto, el StackPanel no se mostrará, pero el inmueble seguirá retenido (es decir, habrá un espacio en blanco en la parte superior de su aplicación).

Por supuesto, puede ser tan elegante como necesite estar aquí - podría tener un pequeño cuadro de lista con todos los mensajes, o un par de botones para desplazarse por los mensajes, o un botón para abrir una ventana con todos los mensajes o ...

+0

Creo que la barra de estado es una manera, creo que pensar en una de las mejores implementaciones de lo que quiero es como los navegadores de notificación dan cuando bloquean ventanas emergentes. ¿Cómo podría implementar eso en WPF? Creo que es posible que solo necesitemos ayuda para comenzar. Creo que primero tengo que deslizar hacia abajo las notificaciones desde la parte superior de la ventana. Cuando esto sucede, creo que es mejor que el contenido de la ventana también se deslice hacia abajo. También me gusta que las notificaciones puedan apilarse de alguna manera, por ejemplo, cuando hay más de 1 notificación para mostrar. –

+0

me gustaría las notificaciones para ser discreto, por lo que los diálogos no son realmente lo que quiero aquí, seguro que son fáciles de implementar –

+0

voy a actualizar mi respuesta un poco para empezar, pero no puedo diseñar toda la aplicación para usted ... –