Commits

ruxoz committed ec0af29

Ported from SVN.

Comments (0)

Files changed (62)

+syntax: glob
+_ReSharper.*
+bin/
+obj/

Design/RZScreenSaver.mdr

Binary file added.

Design/RZScreenSaver.mdzip

Binary file added.

RZScreenSaver.sln

+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{78AB2D4A-0F28-4D89-938C-EF2963D25E60}"
+	ProjectSection(SolutionItems) = preProject
+		license.txt = license.txt
+		user stories.txt = user stories.txt
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RZWScreenSaver", "RZWScreenSaver\RZWScreenSaver.csproj", "{94FEF7B6-CD22-4ABE-A622-FC0E85ADEC46}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|Mixed Platforms = Debug|Mixed Platforms
+		Debug|x64 = Debug|x64
+		Release|Any CPU = Release|Any CPU
+		Release|Mixed Platforms = Release|Mixed Platforms
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{94FEF7B6-CD22-4ABE-A622-FC0E85ADEC46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{94FEF7B6-CD22-4ABE-A622-FC0E85ADEC46}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{94FEF7B6-CD22-4ABE-A622-FC0E85ADEC46}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{94FEF7B6-CD22-4ABE-A622-FC0E85ADEC46}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{94FEF7B6-CD22-4ABE-A622-FC0E85ADEC46}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{94FEF7B6-CD22-4ABE-A622-FC0E85ADEC46}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{94FEF7B6-CD22-4ABE-A622-FC0E85ADEC46}.Release|Any CPU.Build.0 = Release|Any CPU
+		{94FEF7B6-CD22-4ABE-A622-FC0E85ADEC46}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{94FEF7B6-CD22-4ABE-A622-FC0E85ADEC46}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{94FEF7B6-CD22-4ABE-A622-FC0E85ADEC46}.Release|x64.ActiveCfg = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

RZScreenSaver.suo

Binary file added.

RZWScreenSaver/AboutRZ.xaml

+<Window x:Class="RZWScreenSaver.AboutRZ"
+    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+    xmlns:tb="http://www.hardcodet.net/taskbar"
+    Title="About RZ Screen Saver" Height="300" Width="300" ResizeMode="NoResize" ShowInTaskbar="False">
+    <DockPanel>
+        <tb:TaskbarIcon Name="trayIcon" IconSource="/RZWScreenSaver;Component/images/tray_icon.ico">
+            <tb:TaskbarIcon.ContextMenu>
+                <ContextMenu>
+                    <MenuItem Header="_About..." Click="onShowAboutWindow" />
+                    <MenuItem Header="_Settings..." Click="onShowConfigDialog" />
+                    <Separator />
+                    <MenuItem Name="showTitleMenu" Header="Show _Title" IsCheckable="True" Click="onToggleShowTitle" />
+                    <Separator />
+                    <MenuItem Header="Set _1" Tag="0" Click="onSwitchSet"/>
+                    <MenuItem Header="Set _2" Tag="1" Click="onSwitchSet"/>
+                    <MenuItem Header="Set _3" Tag="2" Click="onSwitchSet"/>
+                    <MenuItem Header="Set _4" Tag="3" Click="onSwitchSet"/>
+                    <Separator />
+                    <MenuItem Header="E_xit" Click="onQuitApplications" />
+                </ContextMenu>
+            </tb:TaskbarIcon.ContextMenu>
+        </tb:TaskbarIcon>
+        <Button Click="onHideWindow" DockPanel.Dock="Bottom">Ok</Button>
+        <Grid>
+            <Image Source="/RZWScreenSaver;component/images/RZ Normal Badge Logo.png" />
+            <TextBlock FontSize="16pt" Foreground="Red">Screen Saver by<LineBreak />Ruxo Zheng</TextBlock>
+        </Grid>
+    </DockPanel>
+</Window>

RZWScreenSaver/AboutRZ.xaml.cs

+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Controls;
+using RZWScreenSaver.Properties;
+
+namespace RZWScreenSaver {
+    /// <summary>
+    /// Interaction logic for AboutRZ.xaml
+    /// </summary>
+    public partial class AboutRZ{
+        public AboutRZ() {
+            InitializeComponent();
+        }
+        internal AboutRZ(ScreenSaverEngine.ISaverEngine engine) {
+            InitializeComponent();
+            saverEngine = engine;
+            showTitleMenu.IsChecked = Settings.Default.ShowTitle;
+        }
+        protected override void OnSourceInitialized(EventArgs e) {
+            base.OnSourceInitialized(e);
+            new GlassHelper(this).ExtendGlassFrame();
+        }
+        protected override void OnClosing(System.ComponentModel.CancelEventArgs e) {
+            base.OnClosing(e);
+            e.Cancel = !allowClose;
+        }
+        protected override void OnClosed(EventArgs e) {
+            base.OnClosed(e);
+            trayIcon.Dispose();
+            trayIcon = null;
+            Application.Current.Shutdown();
+        }
+        void onHideWindow(object sender, RoutedEventArgs e){
+            e.Handled = true;
+            Hide();
+        }
+        void onQuitApplications(object sender, RoutedEventArgs e){
+            e.Handled = true;
+            allowClose = true;
+            Close();
+        }
+        void onShowAboutWindow(object sender, RoutedEventArgs e){
+            e.Handled = true;
+            Show();
+        }
+        bool allowClose;
+        void onShowConfigDialog(object sender, RoutedEventArgs e){
+            Debug.WriteLine(e.Handled);
+            e.Handled = true;
+            new ConfigDialog().ShowDialog();
+        }
+        void onSwitchSet(object sender, RoutedEventArgs e){
+            var menuItem = (MenuItem) sender;
+            var setIndex = Int32.Parse(menuItem.Tag.ToString());
+            saverEngine.SwitchToSet(setIndex);
+        }
+        ScreenSaverEngine.ISaverEngine saverEngine;
+        void onToggleShowTitle(object sender, RoutedEventArgs e){
+            saverEngine.ToggleShowTitle();
+        }
+    }
+}

RZWScreenSaver/BackgroundSlideShowEngine.cs

+using System;
+using System.Diagnostics;
+using System.Reflection;
+using System.Threading;
+using System.Windows;
+using System.Windows.Threading;
+using RZWScreenSaver.Properties;
+
+namespace RZWScreenSaver{
+    class BackgroundSlideShowEngine{
+        public BackgroundSlideShowEngine(IPictureSource source){
+            pictureSource = source;
+
+            screenSaverCheck.Interval = TimeSpan.FromSeconds(5);
+            screenSaverCheck.Tick += onCheckScreenSaver;
+        }
+        void onCheckScreenSaver(object sender, EventArgs e){
+            bool isRunning;
+            var success = Win32.SystemParametersInfo(Win32.SPI_GETSCREENSAVERRUNNING, 0, out isRunning, 0);
+            Debug.Assert(success);
+            if (isRunning ^ pictureSource.IsPaused)
+                if (isRunning)
+                    pictureSource.Pause();
+                else
+                    pictureSource.Resume();
+        }
+        public void Start(PageHost[] slideShowList){
+            var engineAssemblyPath = Assembly.GetExecutingAssembly().Location;
+            Debug.Assert(engineAssemblyPath != null);
+            var aboutDomain = AppDomain.CreateDomain("Background Domain");
+            var helperTypeName = typeof (ForegroundDomain).FullName;
+            var foregroundDomain = (ForegroundDomain) aboutDomain.CreateInstanceFromAndUnwrap(engineAssemblyPath,helperTypeName);
+            foregroundDomain.MainApplication = new SaverEngine(pictureSource, slideShowList);
+
+            var aboutThread = new Thread(foregroundDomain.RunAbout);
+            aboutThread.SetApartmentState(ApartmentState.STA);
+            aboutThread.Start();
+
+            screenSaverCheck.Start();
+        }
+        public class SaverEngine : MarshalByRefObject, ScreenSaverEngine.ISaverEngine, IDisposable{
+            public SaverEngine(IPictureSource source, PageHost[] slideShowList){
+                pictureSource = source;
+                this.slideShowList = slideShowList;
+            }
+            public void SwitchToSet(int setIndex){
+                Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle,
+                                                           new Action<int>(pictureSource.SwitchToSet), setIndex);
+                Settings.Default.BackgroundPictureSetSelected = setIndex;
+                Settings.Default.Save();
+            }
+            public void ToggleShowTitle(){
+                Settings.Default.ShowTitle = !Settings.Default.ShowTitle;
+                foreach (var host in slideShowList){
+                    Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.DataBind,
+                                                               new Action<PageHost>(setHostTitle), host);
+                }
+                Settings.Default.Save();
+            }
+            public void Dispose(){
+                Application.Current.Dispatcher.BeginInvokeShutdown(DispatcherPriority.Background);
+            }
+            public override object InitializeLifetimeService() {
+                return null;
+            }
+            /// <summary>
+            /// must be called from its thread
+            /// </summary>
+            void setHostTitle(PageHost host){
+                host.SlidePage.ShowTitle = Settings.Default.ShowTitle;
+            }
+            readonly IPictureSource pictureSource;
+            readonly PageHost[] slideShowList;
+        }
+        public class ForegroundDomain : MarshalByRefObject{
+            public SaverEngine MainApplication { get; set; }
+            public void RunAbout(){
+                Debug.WriteLine("App Domain Name: " + AppDomain.CurrentDomain.FriendlyName);
+                Debug.WriteLine("Has Application? " + (Application.Current != null));
+                var aboutDialog = new AboutRZ(MainApplication);
+                aboutDialog.Hide();
+                new Application{ShutdownMode = ShutdownMode.OnExplicitShutdown}.Run();
+                
+                if (MainApplication != null)
+                    MainApplication.Dispose();
+            }
+            public override object InitializeLifetimeService() {
+                return null;
+            }
+        }
+        readonly DispatcherTimer screenSaverCheck = new DispatcherTimer(DispatcherPriority.Background);
+        readonly IPictureSource pictureSource;
+    }
+}

RZWScreenSaver/ConfigDialog.xaml

+<Window x:Class="RZWScreenSaver.ConfigDialog"
+    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
+    xmlns:rz="clr-namespace:RZWScreenSaver"
+    Title="RZ Slide Show Configuration"
+        MinWidth="600" MinHeight="360"
+        WindowStartupLocation="CenterScreen" Height="460" Width="600" ShowInTaskbar="False"
+        Padding="2" ResizeMode="CanResizeWithGrip" Icon="images/Clipping Text.png">
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition/>
+            <RowDefinition Height="Auto"/>
+        </Grid.RowDefinitions>
+    <Rectangle Fill="WhiteSmoke" />
+    <DockPanel>
+            <DockPanel DockPanel.Dock="Top">
+                <GroupBox Header="Saver mode" DockPanel.Dock="Right">
+                    <StackPanel>
+                        <RadioButton Name="asSlideShowMode" IsChecked="True" Checked="onContentChanged">Slide show</RadioButton>
+                        <RadioButton Name="asPhotoCollageMode" IsChecked="False" Checked="onContentChanged">Photo collage</RadioButton>
+                        <RadioButton Name="asMixedMode" IsChecked="False" Checked="onContentChanged">Mixed</RadioButton>
+                    </StackPanel>
+                </GroupBox>
+                <Grid VerticalAlignment="Top">
+                    <Grid.RowDefinitions>
+                        <RowDefinition/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition/>
+                        <ColumnDefinition/>
+                        <ColumnDefinition/>
+                    </Grid.ColumnDefinitions>
+                    <Label Name="label1" Grid.Row="0" Grid.Column="0">Slide Delay (s)</Label>
+                    <WindowsFormsHost Margin="3" TabIndex="0" Grid.Row="1" Grid.Column="0">
+                        <wf:NumericUpDown x:Name="slideDelayInput" Minimum="3" Maximum="99" ForeColor="Black" />
+                    </WindowsFormsHost>
+                    <Label Name="label2" Grid.Row="0" Grid.Column="1">Slide Mode:</Label>
+                    <ComboBox Name="slideModeList" Margin="3" Grid.Row="1" Grid.Column="1" SelectionChanged="onChangeSlideMode">
+                        <rz:SlideMode>Sequence</rz:SlideMode>
+                        <rz:SlideMode>SortedByDateAllFolders</rz:SlideMode>
+                        <rz:SlideMode>SortedByFilenameAllFolders</rz:SlideMode>
+                        <rz:SlideMode>SortedByDatePerFolder</rz:SlideMode>
+                        <rz:SlideMode>SortedByFilenamePerFolder</rz:SlideMode>
+                        <rz:SlideMode>Random</rz:SlideMode>
+                    </ComboBox>
+                    <Label Name="label3" Grid.Column="2">Display Mode:</Label>
+                    <ComboBox Name="displayModeList" Margin="3" Grid.Row="1" Grid.Column="2" SelectionChanged="onContentChanged">
+                        <rz:DisplayMode>Original</rz:DisplayMode>
+                        <rz:DisplayMode>Stretch</rz:DisplayMode>
+                        <rz:DisplayMode>Fit</rz:DisplayMode>
+                        <rz:DisplayMode>FillCrop</rz:DisplayMode>
+                        <rz:DisplayMode>OriginalOrFit</rz:DisplayMode>
+                        <rz:DisplayMode>OriginalOrFillCrop</rz:DisplayMode>
+                    </ComboBox>
+                </Grid>
+            </DockPanel>
+            <StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
+                <Label>_Background</Label>
+                <TextBox Name="backgroundPicture" Width="300" TextChanged="onTextChanged" />
+                <Button Name="browseFolderButton" Click="onSelectBackground">Browse</Button>
+            </StackPanel>
+                <DockPanel DockPanel.Dock="Top">
+                <Button Name="clearListButton" Margin="10,3,5,3" DockPanel.Dock="Right" Click="onClearList">Clear List</Button>
+                <Button Name="addExclusionButton" Margin="3" DockPanel.Dock="Right" Click="onAddExcludedFolder">Add _Exclusive</Button>
+                <Button Name="addRecursiveButton" Margin="3" DockPanel.Dock="Right" Click="onAddRecursiveFolder">Add _Recursive</Button>
+                <Button Name="addSingleButton" Margin="3" DockPanel.Dock="Right" Click="onAddSingleFolder">Add _Single</Button>
+                    <Label VerticalContentAlignment="Bottom" Target="{Binding ElementName=imageFolderDefault1}" DockPanel.Dock="Left">Picture _Folder Default:</Label>
+                <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
+                    <RadioButton Name="imageFolderDefault1" Margin="3,0" IsChecked="True" Checked="onContentChanged">1</RadioButton>
+                    <RadioButton Name="imageFolderDefault2" Margin="3,0" Checked="onContentChanged">2</RadioButton>
+                    <RadioButton Name="imageFolderDefault3" Margin="3,0" Checked="onContentChanged">3</RadioButton>
+                    <RadioButton Name="imageFolderDefault4" Margin="3,0" Checked="onContentChanged">4</RadioButton>
+                </StackPanel>
+            </DockPanel>
+            <TabControl Name="imageFolderTab">
+                <TabItem Name="imageFolder1" Header="1">
+                    <ListView Name="imageFoldersList1" Margin="3" Keyboard.KeyUp="onKeyPressedInGrid">
+                        <ListView.View>
+                            <GridView>
+                                <GridViewColumn Header="Path" DisplayMemberBinding="{Binding Path}" Width="400"/>
+                                <GridViewColumn Header="Inclusion" DisplayMemberBinding="{Binding Inclusion}" />
+                            </GridView>
+                        </ListView.View>
+                    </ListView>
+                </TabItem>
+                <TabItem Name="imageFolder2" Header="2" >
+                    <ListView Name="imageFoldersList2" Margin="3" Keyboard.KeyUp="onKeyPressedInGrid">
+                        <ListView.View>
+                            <GridView>
+                                <GridViewColumn Header="Path" DisplayMemberBinding="{Binding Path}" Width="400"/>
+                                <GridViewColumn Header="Inclusion" DisplayMemberBinding="{Binding Inclusion}" />
+                            </GridView>
+                        </ListView.View>
+                    </ListView>
+                </TabItem>
+                <TabItem Name="imageFolder3" Header="3" >
+                    <ListView Name="imageFoldersList3" Margin="3" Keyboard.KeyUp="onKeyPressedInGrid">
+                        <ListView.View>
+                            <GridView>
+                                <GridViewColumn Header="Path" DisplayMemberBinding="{Binding Path}" Width="400"/>
+                                <GridViewColumn Header="Inclusion" DisplayMemberBinding="{Binding Inclusion}" />
+                            </GridView>
+                        </ListView.View>
+                    </ListView>
+                </TabItem>
+                <TabItem Name="imageFolder4" Header="4" >
+                    <ListView Name="imageFoldersList4" Margin="3" Keyboard.KeyUp="onKeyPressedInGrid">
+                        <ListView.View>
+                            <GridView>
+                                <GridViewColumn Header="Path" DisplayMemberBinding="{Binding Path}" Width="400"/>
+                                <GridViewColumn Header="Inclusion" DisplayMemberBinding="{Binding Inclusion}" />
+                            </GridView>
+                        </ListView.View>
+                    </ListView>
+                </TabItem>
+            </TabControl>
+    </DockPanel>
+    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Row="1">
+        <Button Name="okButton" IsEnabled="False" Margin="3" MinWidth="60" IsDefault="True" Click="onSave">O_K</Button>
+        <Button Name="cancelButton" Margin="3" MinWidth="60" IsCancel="True">_Cancel</Button>
+    </StackPanel>
+    </Grid>
+</Window>

RZWScreenSaver/ConfigDialog.xaml.cs

+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Forms;
+using System.Windows.Input;
+using RZWScreenSaver.Properties;
+using KeyEventArgs=System.Windows.Input.KeyEventArgs;
+using ListView=System.Windows.Controls.ListView;
+using MessageBox=System.Windows.MessageBox;
+using RadioButton=System.Windows.Controls.RadioButton;
+
+namespace RZWScreenSaver {
+    /// <summary>
+    /// Interaction logic for ConfigDialog.xaml
+    /// </summary>
+    partial class ConfigDialog{
+        const int NumberOfPictureSet = 4;
+        #region ctors
+        public ConfigDialog() {
+            InitializeComponent();
+            defaultRadioButtons = new[]
+                                  {imageFolderDefault1, imageFolderDefault2, imageFolderDefault3, imageFolderDefault4};
+            Debug.Assert(defaultRadioButtons.Length == NumberOfPictureSet);
+            imageFolderList = new[]{imageFoldersList1, imageFoldersList2, imageFoldersList3, imageFoldersList4};
+            Debug.Assert(imageFolderList.Length == NumberOfPictureSet);
+
+            // enable only there are more than 1 monitor.
+            asMixedMode.IsEnabled = Screen.AllScreens.Length > 1;
+
+            slideDelayInput.ValueChanged += delegate { enableButtons(true); };
+            loadSettingsToUi();
+            enableButtons(false);
+        }
+        #endregion
+        protected override void OnSourceInitialized(EventArgs e) {
+            base.OnSourceInitialized(e);
+            glassMaker = new GlassHelper(this, new Thickness(-1));
+            glassMaker.ExtendGlassFrame();
+        }
+        ListView currentFolderListView{
+            get{
+                var index = imageFolderTab.SelectedIndex;
+                Debug.Assert(index > 0);
+                return imageFolderList[index];
+            }
+        }
+        FolderCollection currentFolderList{
+            get{
+                var index = imageFolderTab.SelectedIndex;
+                Debug.Assert(index > 0);
+                return folderSet[index];
+            }
+        }
+        #region Save/Restore Settings
+        void loadSettingsToUi(){
+            slideDelayInput.Value = Settings.Default.SlideShowDelay;
+            slideModeList.SelectedItem = Settings.Default.SlideMode;
+            displayModeList.SelectedItem = Settings.Default.DisplayMode;
+            folderDialog.SelectedPath = Settings.Default.LastSelectedFolder;
+
+            folderSet = Settings.Default.PicturePaths ?? new FolderCollectionSet();
+            folderSet.SelectedIndex = Settings.Default.PictureSetSelected;
+            for(int setIndex=0; setIndex < NumberOfPictureSet; ++setIndex)
+                if (setIndex >= folderSet.Count)
+                    folderSet.Add(new FolderCollection());
+                else
+                    foreach(var item in folderSet[setIndex])
+                        imageFolderList[setIndex].Items.Add(item);
+            Debug.Assert(folderSet.SelectedIndex < NumberOfPictureSet);
+            defaultRadioButtons[folderSet.SelectedIndex].IsChecked = true;
+
+            loadUiSaverMode(Settings.Default.SaverMode);
+            backgroundPicture.Text = Settings.Default.BackgroundPicturePath;
+        }
+        void loadUiSaverMode(SaverMode mode){
+            switch (mode){
+            case SaverMode.SlideShow:
+                asSlideShowMode.IsChecked = true;
+                break;
+            case SaverMode.PhotoCollage:
+                asPhotoCollageMode.IsChecked = true;
+                break;
+            case SaverMode.Mixed:
+                asMixedMode.IsChecked = true;
+                break;
+            default:
+                asSlideShowMode.IsChecked = true;
+                Debug.Write("Saver mode ");
+                Debug.Write(Settings.Default.SaverMode);
+                Debug.WriteLine(" is not handled!!");
+                break;
+            }
+        }
+        void storeUiToSettings(){
+            var defaultSetIndex = Array.FindIndex(defaultRadioButtons, radio => radio.IsChecked != null && radio.IsChecked.Value);
+            Debug.Assert(defaultSetIndex != -1);
+
+            folderSet.SelectedIndex = defaultSetIndex;
+
+            Settings.Default.SlideShowDelay = (int) slideDelayInput.Value;
+            Settings.Default.SlideMode = (SlideMode) slideModeList.SelectedItem;
+            Settings.Default.DisplayMode = (DisplayMode) displayModeList.SelectedItem;
+            Settings.Default.PicturePaths = folderSet;
+            Settings.Default.LastSelectedFolder = folderDialog.SelectedPath;
+            Settings.Default.SaverMode = (bool) asSlideShowMode.IsChecked
+                                             ? SaverMode.SlideShow
+                                             : (bool) asPhotoCollageMode.IsChecked ? SaverMode.PhotoCollage : SaverMode.Mixed;
+            Settings.Default.PictureSetSelected = folderSet.SelectedIndex;
+            Settings.Default.BackgroundPicturePath = backgroundPicture.Text;
+        }
+        #endregion
+
+        void enableButtons(bool enable){
+            if (okButton != null)
+                okButton.IsEnabled = enable;
+        }
+        void selectAndAddFolder(InclusionMode mode){
+            if (folderDialog.ShowDialog(new Winform32Helper(this)) == System.Windows.Forms.DialogResult.OK){
+                if (!currentFolderList.Contains(folderDialog.SelectedPath)){
+                    var folder = currentFolderList.Add(folderDialog.SelectedPath, mode);
+                    currentFolderListView.Items.Add(folder);
+                }
+                enableButtons(true);
+            }
+        }
+
+        #region Event Handlers
+
+        void onClearList(object sender, RoutedEventArgs e){
+            if (currentFolderList.Count > 0
+                && MessageBox.Show("Are you sure to clear the list?", "Clear folder list",
+                    MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes){
+                currentFolderListView.Items.Clear();
+                currentFolderList.Clear();
+                enableButtons(true);
+            }
+        }
+        void onContentChanged(object sender,RoutedEventArgs e) {
+            Debug.WriteLine("Event:" + e + ", Source=" + e.Source);
+            var selectionArg = e as SelectionChangedEventArgs;
+            enableButtons(selectionArg == null || selectionArg.RemovedItems.Count > 0);
+            if (selectionArg != null){
+                Debug.WriteLine("Add Items = " + selectionArg.AddedItems.Count);
+                if (selectionArg.AddedItems.Count > 0)
+                    Debug.WriteLine("\tFirst Item: " + selectionArg.AddedItems[0]);
+                Debug.WriteLine("Remove Items = " + selectionArg.RemovedItems.Count);
+                if (selectionArg.RemovedItems.Count > 0)
+                    Debug.WriteLine("\tFirst Item: " + selectionArg.RemovedItems[0]);
+            }
+        }
+        void onSave(object sender, RoutedEventArgs e){
+            storeUiToSettings();
+            Settings.Default.Save();
+            DialogResult = true;
+        }
+        void onAddExcludedFolder(object sender, RoutedEventArgs e){
+            selectAndAddFolder(InclusionMode.Exclude);
+        }
+        void onAddSingleFolder(object sender, RoutedEventArgs e){
+            selectAndAddFolder(InclusionMode.Single);
+        }
+        void onAddRecursiveFolder(object sender, RoutedEventArgs e){
+            selectAndAddFolder(InclusionMode.Recursive);
+        }
+        void onKeyPressedInGrid(object sender, KeyEventArgs e){
+            if (e.Key == Key.Delete && currentFolderListView.SelectedItems.Count > 0){
+                e.Handled = true;
+                var selectedFolders = currentFolderListView.SelectedItems.CastToArray<FolderInclusion>();
+                foreach (FolderInclusion folder in selectedFolders){
+                    currentFolderListView.Items.Remove(folder);
+                    currentFolderList.Remove(folder);
+                }
+                enableButtons(true);
+            }
+        }
+        void onSelectBackground(object sender, RoutedEventArgs e){
+            var fileDialog = new Microsoft.Win32.OpenFileDialog{
+                                                   InitialDirectory = backgroundPicture.Text,
+                                                   Title = "Browse background picture file",
+                                                   CheckFileExists = true,
+                                                   DefaultExt = "jpg",
+                                                   Filter = "JPEG|*.jpg;*.jpeg|GIF|*.gif|PNG|*.png|Bitmap|*.bmp|TIFF|*.tiff|All supported files|*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.tiff"
+                                               };
+            var result = fileDialog.ShowDialog();
+            if ((bool)result && !fileDialog.FileName.Equals(backgroundPicture.Text, StringComparison.OrdinalIgnoreCase)){
+                backgroundPicture.Text = fileDialog.FileName;
+                enableButtons(true);
+            }
+        }
+        void onTextChanged(object sender, TextChangedEventArgs e){
+            enableButtons(true);
+        }
+
+        #endregion
+
+        readonly RadioButton[] defaultRadioButtons;
+        readonly ListView[] imageFolderList;
+        FolderCollectionSet folderSet;
+        GlassHelper glassMaker;
+        readonly FolderBrowserDialog folderDialog = new FolderBrowserDialog{
+                                                                               Description = "Select a folder containing any picture.",
+                                                                               ShowNewFolderButton = false,
+                                                                           };
+        void onChangeSlideMode(object sender, SelectionChangedEventArgs e){
+            Settings.Default.LastShownIndex = 0;
+            onContentChanged(sender, e);
+        }
+    }
+}

RZWScreenSaver/DeleteDialog.xaml

+<Window x:Class="RZWScreenSaver.DeleteDialog"
+    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+    Title="Picture Deletion" ShowInTaskbar="False" Topmost="True" ResizeMode="CanResizeWithGrip" MinHeight="280" MinWidth="240">
+    <DockPanel>
+        <StackPanel HorizontalAlignment="Center" Orientation="Horizontal" DockPanel.Dock="Bottom">
+            <Button Width="96" Margin="3,5" IsDefault="True" Click="onOk">O_k</Button>
+            <Button Width="96" Margin="3,5" TabIndex="0" IsCancel="True">_Cancel</Button>
+            <Button Width="96" Margin="3,5" Click="onMoveFile">_Move To...</Button>
+        </StackPanel>
+        <DockPanel Background="White">
+            <TextBlock FontSize="18" Foreground="Blue" DockPanel.Dock="Top" TextWrapping="WrapWithOverflow">Are you sure to DELETE this picture?</TextBlock>
+            <TextBlock Name="pictureName" HorizontalAlignment="Center" DockPanel.Dock="Bottom">file</TextBlock>
+            <Image Name="previewPicture" HorizontalAlignment="Center" Margin="5" Stretch="Uniform" Source="/RZWScreenSaver;Component/images/Clipping Text.png" />
+        </DockPanel>
+    </DockPanel>
+</Window>

RZWScreenSaver/DeleteDialog.xaml.cs

+using System.Windows;
+using System.Windows.Media;
+
+namespace RZWScreenSaver {
+    /// <summary>
+    /// Interaction logic for DeleteDialog.xaml
+    /// </summary>
+    public partial class DeleteDialog{
+        public DeleteDialog() {
+            InitializeComponent();
+        }
+        public DeleteDialog(ImageSource picture, string pictureName) : this() {
+            previewPicture.Source = picture;
+            this.pictureName.Text = pictureName;
+        }
+        public bool MoveFileNeeded{ get; private set; }
+        void onOk(object sender, RoutedEventArgs e){
+            DialogResult = true;
+        }
+        void onMoveFile(object sender, RoutedEventArgs e){
+            MoveFileNeeded = true;
+            DialogResult = true;
+        }
+    }
+}

RZWScreenSaver/DisplayMode.cs

+namespace RZWScreenSaver{
+    public enum DisplayMode{
+        Original,
+        Stretch,
+        Fit,
+        FillCrop,
+        OriginalOrFit,
+        OriginalOrFillCrop,
+    }
+}

RZWScreenSaver/External/Hardcodet.Wpf.TaskbarNotification.dll

Binary file added.

RZWScreenSaver/External/Hardcodet.Wpf.TaskbarNotification.pdb

Binary file added.

RZWScreenSaver/External/Hardcodet.Wpf.TaskbarNotification.xml

+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Hardcodet.Wpf.TaskbarNotification</name>
+    </assembly>
+    <members>
+        <member name="T:Hardcodet.Wpf.TaskbarNotification.Interop.IconState">
+            <summary>
+            The state of the icon - can be set to
+            hide the icon.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.IconState.Visible">
+            <summary>
+            The icon is visible.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.IconState.Hidden">
+            <summary>
+            Hide the icon.
+            </summary>
+        </member>
+        <member name="T:Hardcodet.Wpf.TaskbarNotification.Interop.IconDataMembers">
+            <summary>
+            Indicates which members of a <see cref="T:Hardcodet.Wpf.TaskbarNotification.Interop.NotifyIconData"/> structure
+            were set, and thus contain valid data or provide additional information
+            to the ToolTip as to how it should display.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.IconDataMembers.Message">
+            <summary>
+            The message ID is set.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.IconDataMembers.Icon">
+            <summary>
+            The notification icon is set.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.IconDataMembers.Tip">
+            <summary>
+            The tooltip is set.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.IconDataMembers.State">
+            <summary>
+            State information (<see cref="T:Hardcodet.Wpf.TaskbarNotification.Interop.IconState"/>) is set. This
+            applies to both <see cref="F:Hardcodet.Wpf.TaskbarNotification.Interop.NotifyIconData.IconState"/> and
+            <see cref="F:Hardcodet.Wpf.TaskbarNotification.Interop.NotifyIconData.StateMask"/>.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.IconDataMembers.Info">
+            <summary>
+            The ballon ToolTip is set. Accordingly, the following
+            members are set: <see cref="F:Hardcodet.Wpf.TaskbarNotification.Interop.NotifyIconData.BalloonText"/>,
+            <see cref="F:Hardcodet.Wpf.TaskbarNotification.Interop.NotifyIconData.BalloonTitle"/>, <see cref="F:Hardcodet.Wpf.TaskbarNotification.Interop.NotifyIconData.BalloonFlags"/>,
+            and <see cref="F:Hardcodet.Wpf.TaskbarNotification.Interop.NotifyIconData.VersionOrTimeout"/>.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.IconDataMembers.Realtime">
+            <summary>
+            Windows Vista (Shell32.dll version 6.0.6) and later. If the ToolTip
+            cannot be displayed immediately, discard it.<br/>
+            Use this flag for ToolTips that represent real-time information which
+            would be meaningless or misleading if displayed at a later time.
+            For example, a message that states "Your telephone is ringing."<br/>
+            This modifies and must be combined with the <see cref="F:Hardcodet.Wpf.TaskbarNotification.Interop.IconDataMembers.Info"/> flag.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.IconDataMembers.UseLegacyToolTips">
+            <summary>
+            Windows Vista (Shell32.dll version 6.0.6) and later.
+            Use the standard ToolTip. Normally, when uVersion is set
+            to NOTIFYICON_VERSION_4, the standard ToolTip is replaced
+            by the application-drawn pop-up user interface (UI).
+            If the application wants to show the standard tooltip
+            in that case, regardless of whether the on-hover UI is showing,
+            it can specify NIF_SHOWTIP to indicate the standard tooltip
+            should still be shown.<br/>
+            Note that the NIF_SHOWTIP flag is effective until the next call 
+            to Shell_NotifyIcon.
+            </summary>
+        </member>
+        <member name="T:Hardcodet.Wpf.TaskbarNotification.RoutedEventHelper">
+            <summary>
+            Helper class used by routed events of the
+            <see cref="T:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon"/> class.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.RoutedEventHelper.RaiseEvent(System.Windows.DependencyObject,System.Windows.RoutedEventArgs)">
+            <summary>
+            A static helper method to raise a routed event on a target UIElement or ContentElement.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+            <param name="args">RoutedEventArgs to use when raising the event</param>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.RoutedEventHelper.AddHandler(System.Windows.DependencyObject,System.Windows.RoutedEvent,System.Delegate)">
+            <summary>
+            A static helper method that adds a handler for a routed event 
+            to a target UIElement or ContentElement.
+            </summary>
+            <param name="element">UIElement or ContentElement that listens to the event</param>
+            <param name="routedEvent">Event that will be handled</param>
+            <param name="handler">Event handler to be added</param>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.RoutedEventHelper.RemoveHandler(System.Windows.DependencyObject,System.Windows.RoutedEvent,System.Delegate)">
+            <summary>
+            A static helper method that removes a handler for a routed event 
+            from a target UIElement or ContentElement.
+            </summary>
+            <param name="element">UIElement or ContentElement that listens to the event</param>
+            <param name="routedEvent">Event that will no longer be handled</param>
+            <param name="handler">Event handler to be removed</param>
+        </member>
+        <member name="T:Hardcodet.Wpf.TaskbarNotification.Interop.WindowProcedureHandler">
+            <summary>
+            Callback delegate which is used by the Windows API to
+            submit window messages.
+            </summary>
+        </member>
+        <member name="T:Hardcodet.Wpf.TaskbarNotification.Interop.WindowClass">
+            <summary>
+            Win API WNDCLASS struct - represents a single window.
+            Used to receive window messages.
+            </summary>
+        </member>
+        <member name="T:Hardcodet.Wpf.TaskbarNotification.Util">
+            <summary>
+            Util and extension methods.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Util.CreateHelperWindow">
+            <summary>
+            Creates an transparent window without dimension that
+            can be used to temporarily obtain focus and/or
+            be used as a window message sink.
+            </summary>
+            <returns>Empty window.</returns>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Util.WriteIconData(Hardcodet.Wpf.TaskbarNotification.Interop.NotifyIconData@,Hardcodet.Wpf.TaskbarNotification.Interop.NotifyCommand)">
+            <summary>
+            Updates the taskbar icons with data provided by a given
+            <see cref="T:Hardcodet.Wpf.TaskbarNotification.Interop.NotifyIconData"/> instance.
+            </summary>
+            <param name="data">Configuration settings for the NotifyIcon.</param>
+            <param name="command">Operation on the icon (e.g. delete the icon).</param>
+            <returns>True if the data was successfully written.</returns>
+            <remarks>See Shell_NotifyIcon documentation on MSDN for details.</remarks>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Util.WriteIconData(Hardcodet.Wpf.TaskbarNotification.Interop.NotifyIconData@,Hardcodet.Wpf.TaskbarNotification.Interop.NotifyCommand,Hardcodet.Wpf.TaskbarNotification.Interop.IconDataMembers)">
+            <summary>
+            Updates the taskbar icons with data provided by a given
+            <see cref="T:Hardcodet.Wpf.TaskbarNotification.Interop.NotifyIconData"/> instance.
+            </summary>
+            <param name="data">Configuration settings for the NotifyIcon.</param>
+            <param name="command">Operation on the icon (e.g. delete the icon).</param>
+            <param name="flags">Defines which members of the <paramref name="data"/>
+            structure are set.</param>
+            <returns>True if the data was successfully written.</returns>
+            <remarks>See Shell_NotifyIcon documentation on MSDN for details.</remarks>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Util.GetBalloonFlag(Hardcodet.Wpf.TaskbarNotification.BalloonIcon)">
+            <summary>
+            Gets a <see cref="T:Hardcodet.Wpf.TaskbarNotification.Interop.BalloonFlags"/> enum value that
+            matches a given <see cref="T:Hardcodet.Wpf.TaskbarNotification.BalloonIcon"/>.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Util.ToIcon(System.Windows.Media.ImageSource)">
+            <summary>
+            Reads a given image resource into a WinForms icon.
+            </summary>
+            <param name="imageSource">Image source pointing to
+            an icon file (*.ico).</param>
+            <returns>An icon object that can be used with the
+            taskbar area.</returns>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Util.Is``1(``0,``0[])">
+            <summary>
+            Checks a list of candidates for equality to a given
+            reference value.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="value">The evaluated value.</param>
+            <param name="candidates">A liste of possible values that are
+            regarded valid.</param>
+            <returns>True if one of the submitted <paramref name="candidates"/>
+            matches the evaluated value. If the <paramref name="candidates"/>
+            parameter itself is null, too, the method returns false as well,
+            which allows to check with null values, too.</returns>
+            <exception cref="T:System.ArgumentNullException">If <paramref name="candidates"/>
+            is a null reference.</exception>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Util.IsMatch(Hardcodet.Wpf.TaskbarNotification.Interop.MouseEvent,Hardcodet.Wpf.TaskbarNotification.PopupActivationMode)">
+            <summary>
+            Checks if a given <see cref="T:Hardcodet.Wpf.TaskbarNotification.PopupActivationMode"/> is a match for
+            an effectively pressed mouse button.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Util.ExecuteIfEnabled(System.Windows.Input.ICommand,System.Object,System.Windows.IInputElement)">
+            <summary>
+            Executes a given command if its <see cref="M:System.Windows.Input.ICommand.CanExecute(System.Object)"/> method
+            indicates it can run.
+            </summary>
+            <param name="command">The command to be executed, or a null reference.</param>
+            <param name="commandParameter">An optional parameter that is associated with
+            the command.</param>
+            <param name="target">The target element on which to raise the command.</param>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Util.IsDataContextDataBound(System.Windows.FrameworkElement)">
+            <summary>
+            Checks whether the <see cref="F:System.Windows.FrameworkElement.DataContextProperty"/>
+             is bound or not.
+            </summary>
+            <param name="element">The element to be checked.</param>
+            <returns>True if the data context property is being managed by a
+            binding expression.</returns>
+            <exception cref="T:System.ArgumentNullException">If <paramref name="element"/>
+            is a null reference.</exception>
+        </member>
+        <member name="P:Hardcodet.Wpf.TaskbarNotification.Util.IsDesignMode">
+            <summary>
+            Checks whether the application is currently in design mode.
+            </summary>
+        </member>
+        <member name="T:Hardcodet.Wpf.TaskbarNotification.Interop.WinApi">
+            <summary>
+            Win32 API imports.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Interop.WinApi.Shell_NotifyIcon(Hardcodet.Wpf.TaskbarNotification.Interop.NotifyCommand,Hardcodet.Wpf.TaskbarNotification.Interop.NotifyIconData@)">
+            <summary>
+            Creates, updates or deletes the taskbar icon.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Interop.WinApi.CreateWindowEx(System.Int32,System.String,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.UInt32,System.Int32,System.Int32,System.Int32)">
+            <summary>
+            Creates the helper window that receives messages from the taskar icon.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Interop.WinApi.DefWindowProc(System.IntPtr,System.UInt32,System.UInt32,System.UInt32)">
+            <summary>
+            Processes a default windows procedure.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Interop.WinApi.RegisterClass(Hardcodet.Wpf.TaskbarNotification.Interop.WindowClass@)">
+            <summary>
+            Registers the helper window class.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Interop.WinApi.RegisterWindowMessage(System.String)">
+            <summary>
+            Registers a listener for a window message.
+            </summary>
+            <param name="lpString"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Interop.WinApi.DestroyWindow(System.IntPtr)">
+            <summary>
+            Used to destroy the hidden helper window that receives messages from the
+            taskbar icon.
+            </summary>
+            <param name="hWnd"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Interop.WinApi.SetForegroundWindow(System.IntPtr)">
+            <summary>
+            Gives focus to a given window.
+            </summary>
+            <param name="hWnd"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Interop.WinApi.GetDoubleClickTime">
+            <summary>
+            Gets the maximum number of milliseconds that can elapse between a
+            first click and a second click for the OS to consider the
+            mouse action a double-click.
+            </summary>
+            <returns>The maximum amount of time, in milliseconds, that can
+            elapse between a first click and a second click for the OS to
+            consider the mouse action a double-click.</returns>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Interop.WinApi.GetCursorPos(Hardcodet.Wpf.TaskbarNotification.Interop.Point@)">
+            <summary>
+            Gets the screen coordinates of the current mouse position.
+            </summary>
+            <param name="lpPoint"></param>
+            <returns></returns>
+        </member>
+        <member name="T:Hardcodet.Wpf.TaskbarNotification.Interop.TrayInfo">
+            <summary>
+            Resolves the current tray position.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.Interop.TrayInfo.GetTrayLocation">
+            <summary>
+            Gets the position of the system tray.
+            </summary>
+            <returns>Tray coordinates.</returns>
+        </member>
+        <member name="T:Hardcodet.Wpf.TaskbarNotification.Interop.MouseEvent">
+            <summary>
+            Event flags for clicked events.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.MouseEvent.MouseMove">
+            <summary>
+            The mouse was moved withing the
+            taskbar icon's area.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.MouseEvent.IconRightMouseDown">
+            <summary>
+            The right mouse button was clicked.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.MouseEvent.IconLeftMouseDown">
+            <summary>
+            The left mouse button was clicked.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.MouseEvent.IconRightMouseUp">
+            <summary>
+            The right mouse button was released.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.MouseEvent.IconLeftMouseUp">
+            <summary>
+            The left mouse button was released.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.MouseEvent.IconMiddleMouseDown">
+            <summary>
+            The middle mouse button was clicked.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.MouseEvent.IconMiddleMouseUp">
+            <summary>
+            The middle mouse button was released.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.MouseEvent.IconDoubleClick">
+            <summary>
+            The taskbar icon was double clicked.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.Interop.MouseEvent.BalloonToolTipClicked">
+            <summary>
+            The balloon tip was clicked.
+            </summary>
+        </member>
+        <member name="T:Hardcodet.Wpf.TaskbarNotification.Interop.Point">
+            <summary>
+            Win API struct providing coordinates for a single point.
+            </summary>
+        </member>
+        <member name="T:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon">
+            <summary>
+            A WPF proxy to for a taskbar icon (NotifyIcon) that sits in the system's
+            taskbar notification area ("system tray").
+            </summary>
+            <summary>
+            Contains declarations of WPF dependency properties
+            and events.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.CategoryName">
+            <summary>
+            Category name that is set on designer properties.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.iconData">
+            <summary>
+            Represents the current icon data.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.messageSink">
+            <summary>
+            Receives messages from the taskbar icon.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.delayedTimerAction">
+            <summary>
+            An action that is being invoked if the
+            <see cref="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.singleClickTimer"/> fires.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.singleClickTimer">
+            <summary>
+            A timer that is used to differentiate between single
+            and double clicks.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.balloonCloseTimer">
+            <summary>
+            A timer that is used to close open balloon tooltips.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.#ctor">
+            <summary>
+            Inits the taskbar icon and registers a message listener
+            in order to receive events from the taskbar area.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ShowCustomBalloon(System.Windows.UIElement,System.Windows.Controls.Primitives.PopupAnimation,System.Nullable{System.Int32})">
+            <summary>
+            Shows a custom control as a tooltip in the tray location.
+            </summary>
+            <param name="balloon"></param>
+            <param name="animation">An optional animation for the popup.</param>
+            <param name="timeout">The time after which the popup is being closed.
+            Submit null in order to keep the balloon open inde
+            </param>
+            <exception cref="T:System.ArgumentNullException">If <paramref name="balloon"/>
+            is a null reference.</exception>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ResetBalloonCloseTimer">
+            <summary>
+            Resets the closing timeout, which effectively
+            keeps a displayed balloon message open until
+            it is either closed programmatically through
+            <see cref="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.CloseBalloon"/> or due to a new
+            message being displayed.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.CloseBalloon">
+            <summary>
+            Closes the current <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.CustomBalloon"/>, if the
+            property is set.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.CloseBalloonCallback(System.Object)">
+            <summary>
+            Timer-invoke event which closes the currently open balloon and
+            resets the <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.CustomBalloon"/> dependency property.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnMouseEvent(Hardcodet.Wpf.TaskbarNotification.Interop.MouseEvent)">
+            <summary>
+            Processes mouse events, which are bubbled
+            through the class' routed events, trigger
+            certain actions (e.g. show a popup), or
+            both.
+            </summary>
+            <param name="me">Event flag.</param>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnToolTipChange(System.Boolean)">
+            <summary>
+            Displays a custom tooltip, if available. This method is only
+            invoked for Windows Vista and above.
+            </summary>
+            <param name="visible">Whether to show or hide the tooltip.</param>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.CreateCustomToolTip">
+            <summary>
+            Creates a <see cref="T:System.Windows.Controls.ToolTip"/> control that either
+            wraps the currently set <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayToolTip"/>
+            control or the <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ToolTipText"/> string.<br/>
+            If <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayToolTip"/> itself is already
+            a <see cref="T:System.Windows.Controls.ToolTip"/> instance, it will be used directly.
+            </summary>
+            <remarks>We use a <see cref="T:System.Windows.Controls.ToolTip"/> rather than
+            <see cref="T:System.Windows.Controls.Primitives.Popup"/> because there was no way to prevent a
+            popup from causing cyclic open/close commands if it was
+            placed under the mouse. ToolTip internally uses a Popup of
+            its own, but takes advance of Popup's internal <see cref="!:Popup.HitTestable"/>
+            property which prevents this issue.</remarks>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.WriteToolTipSettings">
+            <summary>
+            Sets tooltip settings for the class depending on defined
+            dependency properties and OS support.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.CreatePopup">
+            <summary>
+            Creates a <see cref="T:System.Windows.Controls.ToolTip"/> control that either
+            wraps the currently set <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayToolTip"/>
+            control or the <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ToolTipText"/> string.<br/>
+            If <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayToolTip"/> itself is already
+            a <see cref="T:System.Windows.Controls.ToolTip"/> instance, it will be used directly.
+            </summary>
+            <remarks>We use a <see cref="T:System.Windows.Controls.ToolTip"/> rather than
+            <see cref="T:System.Windows.Controls.Primitives.Popup"/> because there was no way to prevent a
+            popup from causing cyclic open/close commands if it was
+            placed under the mouse. ToolTip internally uses a Popup of
+            its own, but takes advance of Popup's internal <see cref="!:Popup.HitTestable"/>
+            property which prevents this issue.</remarks>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ShowTrayPopup(Hardcodet.Wpf.TaskbarNotification.Interop.Point)">
+            <summary>
+            Displays the <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayPopup"/> control if
+            it was set.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ShowContextMenu(Hardcodet.Wpf.TaskbarNotification.Interop.Point)">
+            <summary>
+            Displays the <see cref="T:System.Windows.Controls.ContextMenu"/> if
+            it was set.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnBalloonToolTipChanged(System.Boolean)">
+            <summary>
+            Bubbles events if a balloon ToolTip was displayed
+            or removed.
+            </summary>
+            <param name="visible">Whether the ToolTip was just displayed
+            or removed.</param>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ShowBalloonTip(System.String,System.String,Hardcodet.Wpf.TaskbarNotification.BalloonIcon)">
+            <summary>
+            Displays a balloon tip with the specified title,
+            text, and icon in the taskbar for the specified time period.
+            </summary>
+            <param name="title">The title to display on the balloon tip.</param>
+            <param name="message">The text to display on the balloon tip.</param>
+            <param name="symbol">A symbol that indicates the severity.</param>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ShowBalloonTip(System.String,System.String,System.Drawing.Icon)">
+            <summary>
+            Displays a balloon tip with the specified title,
+            text, and a custom icon in the taskbar for the specified time period.
+            </summary>
+            <param name="title">The title to display on the balloon tip.</param>
+            <param name="message">The text to display on the balloon tip.</param>
+            <param name="customIcon">A custom icon.</param>
+            <exception cref="T:System.ArgumentNullException">If <paramref name="customIcon"/>
+            is a null reference.</exception>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ShowBalloonTip(System.String,System.String,Hardcodet.Wpf.TaskbarNotification.Interop.BalloonFlags,System.IntPtr)">
+            <summary>
+            Invokes <see cref="M:Hardcodet.Wpf.TaskbarNotification.Interop.WinApi.Shell_NotifyIcon(Hardcodet.Wpf.TaskbarNotification.Interop.NotifyCommand,Hardcodet.Wpf.TaskbarNotification.Interop.NotifyIconData@)"/> in order to display
+            a given balloon ToolTip.
+            </summary>
+            <param name="title">The title to display on the balloon tip.</param>
+            <param name="message">The text to display on the balloon tip.</param>
+            <param name="flags">Indicates what icon to use.</param>
+            <param name="balloonIconHandle">A handle to a custom icon, if any, or
+            <see cref="F:System.IntPtr.Zero"/>.</param>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.HideBalloonTip">
+            <summary>
+            Hides a balloon ToolTip, if any is displayed.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.DoSingleClickAction(System.Object)">
+            <summary>
+            Performs a delayed action if the user requested an action
+            based on a single click of the left mouse.<br/>
+            This method is invoked by the <see cref="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.singleClickTimer"/>.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.SetVersion">
+            <summary>
+            Sets the version flag for the <see cref="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.iconData"/>.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnTaskbarCreated">
+            <summary>
+            Recreates the taskbar icon if the whole taskbar was
+            recreated (e.g. because Explorer was shut down).
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.CreateTaskbarIcon">
+            <summary>
+            Creates the taskbar icon. This message is invoked during initialization,
+            if the taskbar is restarted, and whenever the icon is displayed.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RemoveTaskbarIcon">
+            <summary>
+            Closes the taskbar icon if required.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.EnsureNotDisposed">
+            <summary>
+            Checks if the object has been disposed and
+            raises a <see cref="T:System.ObjectDisposedException"/> in case
+            the <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.IsDisposed"/> flag is true.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnExit(System.Object,System.EventArgs)">
+            <summary>
+            Disposes the class if the application exits.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.Finalize">
+            <summary>
+            This destructor will run only if the <see cref="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.Dispose"/>
+            method does not get called. This gives this base class the
+            opportunity to finalize.
+            <para>
+            Important: Do not provide destructors in types derived from
+            this class.
+            </para>
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.Dispose">
+            <summary>
+            Disposes the object.
+            </summary>
+            <remarks>This method is not virtual by design. Derived classes
+            should override <see cref="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.Dispose(System.Boolean)"/>.
+            </remarks>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.Dispose(System.Boolean)">
+            <summary>
+            Closes the tray and releases all resources.
+            </summary>
+            <summary>
+            <c>Dispose(bool disposing)</c> executes in two distinct scenarios.
+            If disposing equals <c>true</c>, the method has been called directly
+            or indirectly by a user's code. Managed and unmanaged resources
+            can be disposed.
+            </summary>
+            <param name="disposing">If disposing equals <c>false</c>, the method
+            has been called by the runtime from inside the finalizer and you
+            should not reference other objects. Only unmanaged resources can
+            be disposed.</param>
+            <remarks>Check the <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.IsDisposed"/> property to determine whether
+            the method has already been called.</remarks>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayPopupResolvedPropertyKey">
+            <summary>
+            TrayPopupResolved Read-Only Dependency Property
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayPopupResolvedProperty">
+            <summary>
+            A read-only dependency property that returns the <see cref="T:System.Windows.Controls.Primitives.Popup"/>
+            that is being displayed in the taskbar area based on a user action.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.SetTrayPopupResolved(System.Windows.Controls.Primitives.Popup)">
+            <summary>
+            Provides a secure method for setting the TrayPopupResolved property.  
+            This dependency property indicates ....
+            </summary>
+            <param name="value">The new value for the property.</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayToolTipResolvedPropertyKey">
+            <summary>
+            TrayToolTipResolved Read-Only Dependency Property
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayToolTipResolvedProperty">
+            <summary>
+            A read-only dependency property that returns the <see cref="T:System.Windows.Controls.ToolTip"/>
+            that is being displayed.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.SetTrayToolTipResolved(System.Windows.Controls.ToolTip)">
+            <summary>
+            Provides a secure method for setting the <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayToolTipResolved"/>
+            property.  
+            </summary>
+            <param name="value">The new value for the property.</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.CustomBalloonPropertyKey">
+            <summary>
+            CustomBalloon Read-Only Dependency Property
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.SetCustomBalloon(System.Windows.Controls.Primitives.Popup)">
+            <summary>
+            Provides a secure method for setting the <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.CustomBalloon"/> property.  
+            </summary>
+            <param name="value">The new value for the property.</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.IconSourceProperty">
+            <summary>
+            Resolves an image source and updates the <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.Icon"/> property accordingly.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.IconSourcePropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">
+            <summary>
+            A static callback listener which is being invoked if the
+            <see cref="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.IconSourceProperty"/> dependency property has
+            been changed. Invokes the <see cref="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnIconSourcePropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)"/>
+            instance method of the changed instance.
+            </summary>
+            <param name="d">The currently processed owner of the property.</param>
+            <param name="e">Provides information about the updated property.</param>
+        </member>
+        <!-- Badly formed XML comment ignored for member "M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnIconSourcePropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)" -->
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ToolTipTextProperty">
+            <summary>
+            A tooltip text that is being displayed if no custom <see cref="T:System.Windows.Controls.ToolTip"/>
+            was set or if custom tooltips are not supported.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ToolTipTextPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">
+            <summary>
+            A static callback listener which is being invoked if the
+            <see cref="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ToolTipTextProperty"/> dependency property has
+            been changed. Invokes the <see cref="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnToolTipTextPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)"/>
+            instance method of the changed instance.
+            </summary>
+            <param name="d">The currently processed owner of the property.</param>
+            <param name="e">Provides information about the updated property.</param>
+        </member>
+        <!-- Badly formed XML comment ignored for member "M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnToolTipTextPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)" -->
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayToolTipProperty">
+            <summary>
+            A custom UI element that is displayed as a tooltip if the user hovers over the taskbar icon.
+            Works only with Vista and above. Accordingly, you should make sure that
+            the <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ToolTipText"/> property is set as well.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayToolTipPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">
+            <summary>
+            A static callback listener which is being invoked if the
+            <see cref="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayToolTipProperty"/> dependency property has
+            been changed. Invokes the <see cref="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnTrayToolTipPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)"/>
+            instance method of the changed instance.
+            </summary>
+            <param name="d">The currently processed owner of the property.</param>
+            <param name="e">Provides information about the updated property.</param>
+        </member>
+        <!-- Badly formed XML comment ignored for member "M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnTrayToolTipPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)" -->
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayPopupProperty">
+            <summary>
+            A control that is displayed as a popup when the taskbar icon is clicked.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayPopupPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">
+            <summary>
+            A static callback listener which is being invoked if the
+            <see cref="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayPopupProperty"/> dependency property has
+            been changed. Invokes the <see cref="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnTrayPopupPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)"/>
+            instance method of the changed instance.
+            </summary>
+            <param name="d">The currently processed owner of the property.</param>
+            <param name="e">Provides information about the updated property.</param>
+        </member>
+        <!-- Badly formed XML comment ignored for member "M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnTrayPopupPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)" -->
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.MenuActivationProperty">
+            <summary>
+            Defines what mouse events display the context menu.
+            Defaults to <see cref="F:Hardcodet.Wpf.TaskbarNotification.PopupActivationMode.RightClick"/>.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.PopupActivationProperty">
+            <summary>
+            Defines what mouse events trigger the <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayPopup"/>.
+            Default is <see cref="F:Hardcodet.Wpf.TaskbarNotification.PopupActivationMode.LeftClick"/>.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.VisibilityPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">
+            <summary>
+            A static callback listener which is being invoked if the
+            <see cref="F:System.Windows.UIElement.VisibilityProperty"/> dependency property has
+            been changed. Invokes the <see cref="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnVisibilityPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)"/>
+            instance method of the changed instance.
+            </summary>
+            <param name="d">The currently processed owner of the property.</param>
+            <param name="e">Provides information about the updated property.</param>
+        </member>
+        <!-- Badly formed XML comment ignored for member "M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnVisibilityPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)" -->
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.UpdateDataContext(System.Windows.FrameworkElement,System.Object,System.Object)">
+            <summary>
+            Updates the <see cref="F:System.Windows.FrameworkElement.DataContextProperty"/> of a given
+            <see cref="T:System.Windows.FrameworkElement"/>. This method only updates target elements
+            that do not already have a data context of their own, and either assigns
+            the <see cref="P:System.Windows.FrameworkElement.DataContext"/> of the NotifyIcon, or the
+            NotifyIcon itself, if no data context was assigned at all.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.DataContextPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">
+            <summary>
+            A static callback listener which is being invoked if the
+            <see cref="F:System.Windows.FrameworkElement.DataContextProperty"/> dependency property has
+            been changed. Invokes the <see cref="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnDataContextPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)"/>
+            instance method of the changed instance.
+            </summary>
+            <param name="d">The currently processed owner of the property.</param>
+            <param name="e">Provides information about the updated property.</param>
+        </member>
+        <!-- Badly formed XML comment ignored for member "M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnDataContextPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)" -->
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ContextMenuPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">
+            <summary>
+            A static callback listener which is being invoked if the
+            <see cref="F:System.Windows.FrameworkElement.ContextMenuProperty"/> dependency property has
+            been changed. Invokes the <see cref="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnContextMenuPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)"/>
+            instance method of the changed instance.
+            </summary>
+            <param name="d">The currently processed owner of the property.</param>
+            <param name="e">Provides information about the updated property.</param>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.OnContextMenuPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)">
+            <summary>
+            Releases the old and updates the new <see cref="T:System.Windows.Controls.ContextMenu"/> property
+            in order to reflect both the NotifyIcon's <see cref="P:System.Windows.FrameworkElement.DataContext"/>
+            property and have the <see cref="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.ParentTaskbarIconProperty"/> assigned.
+            </summary>
+            <param name="e">Provides information about the updated property.</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.DoubleClickCommandProperty">
+            <summary>
+            Associates a command that is being executed if the tray icon is being
+            double clicked.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.DoubleClickCommandParameterProperty">
+            <summary>
+            Command parameter for the <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.DoubleClickCommand"/>.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.DoubleClickCommandTargetProperty">
+            <summary>
+            The target of the command that is fired if the notify icon is double clicked.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.LeftClickCommandProperty">
+            <summary>
+            Associates a command that is being executed if the tray icon is being
+            double clicked.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.LeftClickCommandParameterProperty">
+            <summary>
+            Command parameter for the <see cref="P:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.LeftClickCommand"/>.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.LeftClickCommandTargetProperty">
+            <summary>
+            The target of the command that is fired if the notify icon is clicked.
+            </summary>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayLeftMouseDownEvent">
+            <summary>
+            TrayLeftMouseDown Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayLeftMouseDownEvent">
+            <summary>
+            A helper method to raise the TrayLeftMouseDown event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayLeftMouseDownEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayLeftMouseDown event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayRightMouseDownEvent">
+            <summary>
+            TrayRightMouseDown Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayRightMouseDownEvent">
+            <summary>
+            A helper method to raise the TrayRightMouseDown event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayRightMouseDownEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayRightMouseDown event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayMiddleMouseDownEvent">
+            <summary>
+            TrayMiddleMouseDown Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayMiddleMouseDownEvent">
+            <summary>
+            A helper method to raise the TrayMiddleMouseDown event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayMiddleMouseDownEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayMiddleMouseDown event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayLeftMouseUpEvent">
+            <summary>
+            TrayLeftMouseUp Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayLeftMouseUpEvent">
+            <summary>
+            A helper method to raise the TrayLeftMouseUp event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayLeftMouseUpEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayLeftMouseUp event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayRightMouseUpEvent">
+            <summary>
+            TrayRightMouseUp Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayRightMouseUpEvent">
+            <summary>
+            A helper method to raise the TrayRightMouseUp event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayRightMouseUpEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayRightMouseUp event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayMiddleMouseUpEvent">
+            <summary>
+            TrayMiddleMouseUp Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayMiddleMouseUpEvent">
+            <summary>
+            A helper method to raise the TrayMiddleMouseUp event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayMiddleMouseUpEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayMiddleMouseUp event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayMouseDoubleClickEvent">
+            <summary>
+            TrayMouseDoubleClick Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayMouseDoubleClickEvent">
+            <summary>
+            A helper method to raise the TrayMouseDoubleClick event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayMouseDoubleClickEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayMouseDoubleClick event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayMouseMoveEvent">
+            <summary>
+            TrayMouseMove Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayMouseMoveEvent">
+            <summary>
+            A helper method to raise the TrayMouseMove event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayMouseMoveEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayMouseMove event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayBalloonTipShownEvent">
+            <summary>
+            TrayBalloonTipShown Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayBalloonTipShownEvent">
+            <summary>
+            A helper method to raise the TrayBalloonTipShown event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayBalloonTipShownEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayBalloonTipShown event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayBalloonTipClosedEvent">
+            <summary>
+            TrayBalloonTipClosed Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayBalloonTipClosedEvent">
+            <summary>
+            A helper method to raise the TrayBalloonTipClosed event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayBalloonTipClosedEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayBalloonTipClosed event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayBalloonTipClickedEvent">
+            <summary>
+            TrayBalloonTipClicked Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayBalloonTipClickedEvent">
+            <summary>
+            A helper method to raise the TrayBalloonTipClicked event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayBalloonTipClickedEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayBalloonTipClicked event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayContextMenuOpenEvent">
+            <summary>
+            TrayContextMenuOpen Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayContextMenuOpenEvent">
+            <summary>
+            A helper method to raise the TrayContextMenuOpen event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayContextMenuOpenEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayContextMenuOpen event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.PreviewTrayContextMenuOpenEvent">
+            <summary>
+            PreviewTrayContextMenuOpen Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaisePreviewTrayContextMenuOpenEvent">
+            <summary>
+            A helper method to raise the PreviewTrayContextMenuOpen event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaisePreviewTrayContextMenuOpenEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the PreviewTrayContextMenuOpen event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayPopupOpenEvent">
+            <summary>
+            TrayPopupOpen Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayPopupOpenEvent">
+            <summary>
+            A helper method to raise the TrayPopupOpen event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayPopupOpenEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayPopupOpen event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.PreviewTrayPopupOpenEvent">
+            <summary>
+            PreviewTrayPopupOpen Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaisePreviewTrayPopupOpenEvent">
+            <summary>
+            A helper method to raise the PreviewTrayPopupOpen event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaisePreviewTrayPopupOpenEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the PreviewTrayPopupOpen event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.TrayToolTipOpenEvent">
+            <summary>
+            TrayToolTipOpen Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayToolTipOpenEvent">
+            <summary>
+            A helper method to raise the TrayToolTipOpen event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaiseTrayToolTipOpenEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the TrayToolTipOpen event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>
+        <member name="F:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.PreviewTrayToolTipOpenEvent">
+            <summary>
+            PreviewTrayToolTipOpen Routed Event
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaisePreviewTrayToolTipOpenEvent">
+            <summary>
+            A helper method to raise the PreviewTrayToolTipOpen event.
+            </summary>
+        </member>
+        <member name="M:Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.RaisePreviewTrayToolTipOpenEvent(System.Windows.DependencyObject)">
+            <summary>
+            A static helper method to raise the PreviewTrayToolTipOpen event on a target element.
+            </summary>
+            <param name="target">UIElement or ContentElement on which to raise the event</param>
+        </member>