ProgressBarHighlightConverter.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Themes / Aero / Microsoft / Windows / Themes / ProgressBarHighlightConverter.cs / 1305600 / ProgressBarHighlightConverter.cs

                            //---------------------------------------------------------------------------- 
//
// Copyright (C) by Microsoft Corporation.  All rights reserved.
//
//--------------------------------------------------------------------------- 
using System;
using System.Globalization; 
using System.Threading; 

using System.Windows; 
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Media.Animation; 

namespace Microsoft.Windows.Themes 
{ 
    /// 
    /// The ProgressBarHighlightConverter class 
    /// 
    public class ProgressBarHighlightConverter : IMultiValueConverter
    {
        ///  
        ///      Creates the brush for the ProgressBar
        ///  
        /// ForegroundBrush, IsIndeterminate, Width, Height 
        /// 
        ///  
        /// 
        /// Brush for the ProgressBar
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        { 
            //
            // Parameter Validation 
            // 
            Type doubleType = typeof(double);
            if (values == null || 
                (values.Length != 3) ||
                (values[0] == null)  ||
                (values[1] == null)  ||
                (values[2] == null)  || 
                !typeof(Brush).IsAssignableFrom(values[0].GetType()) ||
                !doubleType.IsAssignableFrom(values[1].GetType()) || 
                !doubleType.IsAssignableFrom(values[2].GetType())) 
            {
                return null; 
            }

            //
            // Conversion 
            //
 
            Brush brush = (Brush)values[0]; 
            double width = (double)values[1];
            double height = (double)values[2]; 

            // if an invalid height, return a null brush
            if (width <= 0.0 || Double.IsInfinity(width) || Double.IsNaN(width) ||
                height <= 0.0 || Double.IsInfinity(height) || Double.IsNaN(height) ) 
            {
                return null; 
            } 

            DrawingBrush newBrush = new DrawingBrush(); 

            // Create a Drawing Brush that is 2x longer than progress bar track
            //
            // +-------------+.............. 
            // | highlight   | empty       :
            // +-------------+.............: 
            // 
            //  This brush will animate to the right.
 
            double twiceWidth = width * 2.0;

            // Set the viewport and viewbox to the 2*size of the progress region
            newBrush.Viewport = newBrush.Viewbox = new Rect(-width, 0, twiceWidth, height); 
            newBrush.ViewportUnits = newBrush.ViewboxUnits = BrushMappingMode.Absolute;
 
            newBrush.TileMode = TileMode.None; 
            newBrush.Stretch = Stretch.None;
 
            DrawingGroup myDrawing = new DrawingGroup();
            DrawingContext myDrawingContext = myDrawing.Open();

            // Draw the highlight 
            myDrawingContext.DrawRectangle(brush, null, new Rect(-width, 0, width, height));
 
 
            // Animate the Translation
 
            TimeSpan translateTime = TimeSpan.FromSeconds(twiceWidth / 200.0); // travel at 200px /second
            TimeSpan pauseTime = TimeSpan.FromSeconds(1.0);  // pause 1 second between animations

            DoubleAnimationUsingKeyFrames animation = new DoubleAnimationUsingKeyFrames(); 
            animation.BeginTime = TimeSpan.Zero;
            animation.Duration = new Duration(translateTime + pauseTime); 
            animation.RepeatBehavior = RepeatBehavior.Forever; 
            animation.KeyFrames.Add(new LinearDoubleKeyFrame(twiceWidth, translateTime));
 
            TranslateTransform translation = new TranslateTransform();

            // Set the animation to the XProperty
            translation.BeginAnimation(TranslateTransform.XProperty, animation); 

            // Set the animated translation on the brush 
            newBrush.Transform = translation; 

 
            myDrawingContext.Close();
            newBrush.Drawing = myDrawing;

            return newBrush; 
        }
 
        ///  
        /// Not Supported
        ///  
        /// value, as produced by target
        /// target types
        /// converter parameter
        /// culture information 
        /// Nothing
        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
        { 
            return null;
        } 
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK