diff Messaging/Common/Controls/MetroTile.cs @ 35:83c1f62d9370

All working except image so far
author adminsh@apollo
date Tue, 27 Mar 2012 16:15:45 +0100
parents
children c8c79f05d76f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Messaging/Common/Controls/MetroTile.cs	Tue Mar 27 16:15:45 2012 +0100
@@ -0,0 +1,143 @@
+using System;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+
+namespace Common.Controls
+{
+    [TemplatePart(Name="PART_DISPLAY_ICON", Type=typeof(Image))]
+    [TemplatePart(Name = "PART_DISPLAY_COUNT_CONTAINER", Type = typeof(TextBlock))]
+    [TemplatePart(Name = "PART_DISPLAY_TITLE_CONTAINER", Type = typeof(TextBlock))]
+    public class MetroTile : UserControl
+    {
+
+        #region Constructor
+        
+        static MetroTile()
+        {
+            DefaultStyleKeyProperty.OverrideMetadata(typeof(MetroTile),
+                new FrameworkPropertyMetadata(typeof(MetroTile)));
+
+            CommandManager.RegisterClassCommandBinding(
+                typeof(MetroTile),
+                new CommandBinding(ResetCountCommand, OnResetCountCommand));
+        }
+
+        #endregion
+
+        #region Dependency Properties
+
+        #region DisplayIcon
+
+        /// <summary>
+        /// Icon for the tile
+        /// </summary>
+        public static readonly DependencyProperty DisplayIconProperty =
+            DependencyProperty.Register("DisplayIcon",
+                                        typeof(Image),
+                                        typeof(MetroTile),
+                                        new PropertyMetadata(null));
+
+        public Image DisplayIcon
+        {
+            get { return (Image) this.GetValue(DisplayIconProperty); }
+            set { this.SetValue(DisplayIconProperty, value); }
+        }
+        #endregion
+
+        #region DisplayCount
+
+        /// <summary>
+        /// Display count for the tile
+        /// </summary>
+        public static readonly DependencyProperty DisplayCountProperty =
+            DependencyProperty.Register("DisplayCount",
+                                        typeof(int),
+                                        typeof(MetroTile),
+                                        new UIPropertyMetadata(0));
+
+        public int DisplayCount
+        {
+            get { return (int)this.GetValue(DisplayCountProperty); }
+            set { this.SetValue(DisplayCountProperty, value); }
+        }
+
+        #endregion
+
+        #region DisplayText
+
+        /// <summary>
+        /// Main Display text for the tile
+        /// </summary>
+        public static readonly DependencyProperty DisplayTextProperty =
+            DependencyProperty.Register("DisplayText",
+                                        typeof(string),
+                                        typeof(MetroTile),
+                                        new PropertyMetadata("Not set"));
+
+        public string DisplayText
+        {
+            get { return (string)this.GetValue(DisplayTextProperty); }
+            set { this.SetValue(DisplayTextProperty, value); }
+        }
+        #endregion
+
+        #endregion
+
+        #region Events
+
+        public static readonly RoutedEvent DisplayCountChangedEvent =
+            EventManager.RegisterRoutedEvent("DisplayCountChanged",
+                                            RoutingStrategy.Bubble,
+                                            typeof(RoutedEventHandler),
+                                            typeof(MetroTile));
+
+        public event RoutedEventHandler DisplayCountChanged
+        {
+            add { AddHandler(DisplayCountChangedEvent, value); }
+            remove { RemoveHandler(DisplayCountChangedEvent, value); }
+        }
+
+        protected virtual void OnDisplayCountChanged(int oldValue, int newValue)
+        {
+            //  1. Pair of events: A preview that tunnels and a main event that bubbles
+            //  2. We could also create our own RoutedEventArgs that includes oldValue & new Value
+            
+            var previewEvent = new RoutedEventArgs(PreviewDisplayCountChangedEvent);
+            RaiseEvent(previewEvent);
+
+            var e = new RoutedEventArgs(DisplayCountChangedEvent);
+            RaiseEvent(e);
+        }
+
+        public static readonly RoutedEvent PreviewDisplayCountChangedEvent =
+            EventManager.RegisterRoutedEvent("PreviewDisplayCountChanged",
+                                            RoutingStrategy.Tunnel,
+                                            typeof(RoutedEventHandler),
+                                            typeof(MetroTile));
+
+        public event RoutedEventHandler PreviewDisplayCountChanged
+        {
+            add { AddHandler(PreviewDisplayCountChangedEvent, value); }
+            remove { RemoveHandler(PreviewDisplayCountChangedEvent, value); }
+        }
+
+        #endregion
+
+        #region Commands
+
+        public static readonly ICommand ResetCountCommand =
+            new RoutedUICommand("ResetCount", "ResetCount", typeof(MetroTile));
+
+        private static void OnResetCountCommand(object sender, ExecutedRoutedEventArgs e)
+        {
+            var target = (MetroTile)sender;
+            target.DisplayCount = 0;
+        }
+
+        #endregion
+
+    }
+}
\ No newline at end of file