diff Chronosv2/source/Extensions/Windows/UIElementExtensions.cs @ 10:443821e55f06

Initial cleaned up add from Codeplex files
author stevenh7776 stevenhollidge@hotmail.com
date Tue, 21 Feb 2012 17:25:44 +0700
parents
children 09d18d6e5f40
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Chronosv2/source/Extensions/Windows/UIElementExtensions.cs	Tue Feb 21 17:25:44 2012 +0700
@@ -0,0 +1,97 @@
+/*
+The MIT License
+
+Copyright (c) 2009-2010. Carlos Guzmán Álvarez. http://chronoswpf.codeplex.com/
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+using System.Windows;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+
+namespace Chronos.Extensions.Windows
+{
+    /// <summary>
+    /// Extension methods for the System.Windows.UIElement class
+    /// </summary>
+    public static class UIElementExtensions
+    {
+        #region · Extensions ·
+
+        /// <summary>
+        /// Gets the parent of an <see cref="UIElement"/>.
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="element">The element.</param>
+        /// <returns></returns>
+        public static T GetParent<T>(this UIElement element) where T : UIElement
+        {
+            // Walk the VisualTree to obtain the DesktopItem of the DragThumb
+            DependencyObject parent = VisualTreeHelper.GetParent(element);
+
+            while (parent != null && !(parent is T))
+            {
+                parent = VisualTreeHelper.GetParent(parent);
+            }
+
+            return parent as T;
+        }
+
+        /// <summary>
+        /// Renders the ui element into a bitmap frame.
+        /// </summary>
+        /// <param name="element">The UI element.</param>
+        /// <returns>The created bitmap frame</returns>
+        public static BitmapSource RenderToBitmap(this UIElement element)
+        {
+            return element.RenderToBitmap(1);
+        }
+
+        /// <summary>
+        /// Renders the ui element into a bitmap frame using the specified scale.
+        /// </summary>
+        /// <param name="element">The UI element.</param>
+        /// <param name="scale">The scale (default: 1).</param>
+        /// <returns>The created bitmap frame</returns>
+        public static BitmapSource RenderToBitmap(this UIElement element, double scale)
+        {
+            var renderWidth     = (int)(element.RenderSize.Width * scale);
+            var renderHeight    = (int)(element.RenderSize.Height * scale);
+
+            var renderTarget    = new RenderTargetBitmap(renderWidth, renderHeight, 96, 96, PixelFormats.Pbgra32);
+            var sourceBrush     = new VisualBrush(element);
+
+            var drawingVisual   = new DrawingVisual();
+            var drawingContext  = drawingVisual.RenderOpen();
+
+            using (drawingContext)
+            {
+                drawingContext.PushTransform(new ScaleTransform(scale, scale));
+                drawingContext.DrawRectangle(sourceBrush, null, new Rect(new Point(0, 0), new Point(element.RenderSize.Width, element.RenderSize.Height)));
+            }
+
+            renderTarget.Render(drawingVisual);
+
+            return renderTarget;
+        }
+
+        #endregion
+    }
+}
\ No newline at end of file