Sometimes an app needs an indication of it’s activity to be visible to the user at all times. We already have one mechanism – a tray icon. It’s a well-known and a well-documented trick.
Recently more and more apps are starting to show their activity with the top-most floating windows that are sliding into the view when needed. I see a reason to, sometimes, use this trick but I passionately condemn the implementation where a user (me specifically) can’t move this window out of the way where it overlaps with other notifications or the apps that I’m working with (like Skype or WebEx screen sharing for example).
Below is a small WPF XAML sugar that can allow you to have such a floating window, but, please, make sure a user can drag it out of the way or choose (in the settings?) on what side of the screen he want’s this window to doc. If time permits, I’ll post this information later.
<Window x:Class="JiveHub.Windows.FloatWindow" Name="ThisFloatWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="FloatWindow" Height="70" Width="100" Top="-70" WindowStyle="None" Topmost="True" BorderThickness="0" AllowsTransparency="True" Background="Transparent"> <Window.Resources> <Storyboard x:Key="EmergeWindow"> <DoubleAnimation Storyboard.TargetName="ThisFloatWindow" Storyboard.TargetProperty="(Canvas.Top)" To="-20" Duration="0:0:1"> <DoubleAnimation.EasingFunction> <ElasticEase Oscillations="2" EasingMode="EaseOut" Springiness="3"/> </DoubleAnimation.EasingFunction> </DoubleAnimation> </Storyboard> <Storyboard x:Key="ShrinkWindow"> <DoubleAnimation Storyboard.TargetName="ThisFloatWindow" Storyboard.TargetProperty="(Canvas.Top)" To="-50" Duration="0:0:1" BeginTime="0:0:2"> <DoubleAnimation.EasingFunction> <ElasticEase Oscillations="2" EasingMode="EaseOut" Springiness="3"/> </DoubleAnimation.EasingFunction> </DoubleAnimation> </Storyboard> </Window.Resources> <Window.Triggers> <EventTrigger RoutedEvent="Window.Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="ThisFloatWindow" Storyboard.TargetProperty="(Canvas.Top)" To="-50" Duration="0:0:1" > <DoubleAnimation.EasingFunction> <ElasticEase Oscillations="2" EasingMode="EaseOut" Springiness="3"/> </DoubleAnimation.EasingFunction> </DoubleAnimation> </Storyboard> </BeginStoryboard> </EventTrigger> <EventTrigger RoutedEvent="Window.GotFocus"> <BeginStoryboard Storyboard="{StaticResource EmergeWindow}"> </BeginStoryboard> </EventTrigger> <EventTrigger RoutedEvent="Window.MouseEnter"> <BeginStoryboard Storyboard="{StaticResource EmergeWindow}"> </BeginStoryboard> </EventTrigger> <EventTrigger RoutedEvent="Window.LostFocus"> <BeginStoryboard Storyboard="{StaticResource ShrinkWindow}"> </BeginStoryboard> </EventTrigger> <EventTrigger RoutedEvent="Window.MouseLeave"> <BeginStoryboard Storyboard="{StaticResource ShrinkWindow}"> </BeginStoryboard> </EventTrigger> </Window.Triggers> <Grid> <Border Background="Green" CornerRadius="0,0,5,5" /> </Grid> </Window>