Code:
/ 4.0 / 4.0 / 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. //---------------------------------------------------------------------------- // // 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
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ConstraintStruct.cs
- MaskedTextBoxDesigner.cs
- _IPv6Address.cs
- Parameter.cs
- AutomationPatternInfo.cs
- DataGridRow.cs
- InArgumentConverter.cs
- HttpHandlersSection.cs
- SafeLibraryHandle.cs
- SafeProcessHandle.cs
- ZipIORawDataFileBlock.cs
- ConnectionsZone.cs
- ConfigurationStrings.cs
- TextPatternIdentifiers.cs
- documentation.cs
- MethodInfo.cs
- OleAutBinder.cs
- ReliabilityContractAttribute.cs
- NamedServiceModelExtensionCollectionElement.cs
- CodeGenerator.cs
- EditorAttribute.cs
- IsolatedStorageSecurityState.cs
- CategoryNameCollection.cs
- PackWebRequest.cs
- PageVisual.cs
- ConstantSlot.cs
- KnownTypes.cs
- Rotation3D.cs
- DataRowView.cs
- PageAsyncTaskManager.cs
- MarkupExtensionParser.cs
- ProcessInputEventArgs.cs
- ClickablePoint.cs
- Triplet.cs
- FocusWithinProperty.cs
- WebService.cs
- DeliveryRequirementsAttribute.cs
- Marshal.cs
- Helpers.cs
- DetailsViewDeletedEventArgs.cs
- XPathAncestorQuery.cs
- MsmqIntegrationAppDomainProtocolHandler.cs
- StaticSiteMapProvider.cs
- XmlNavigatorFilter.cs
- AlternateViewCollection.cs
- ScalarOps.cs
- DesignerActionHeaderItem.cs
- WebBrowserProgressChangedEventHandler.cs
- TriggerAction.cs
- KnownColorTable.cs
- StateDesigner.Layouts.cs
- _FtpDataStream.cs
- TypeDescriptor.cs
- Activity.cs
- WindowsPen.cs
- DataGridTextBoxColumn.cs
- DataGridTable.cs
- HostExecutionContextManager.cs
- datacache.cs
- ReadWriteSpinLock.cs
- SafeFileMappingHandle.cs
- WS2007FederationHttpBinding.cs
- DoubleStorage.cs
- IdnMapping.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- CreateUserErrorEventArgs.cs
- WebProxyScriptElement.cs
- SoapProtocolReflector.cs
- Translator.cs
- SqlDataSourceView.cs
- TlsnegoTokenAuthenticator.cs
- DataListItemCollection.cs
- DSASignatureFormatter.cs
- IndexedEnumerable.cs
- TypeResolvingOptionsAttribute.cs
- PointAnimation.cs
- EarlyBoundInfo.cs
- StaticContext.cs
- ExtensibleClassFactory.cs
- SchemaDeclBase.cs
- TypeLoadException.cs
- RC2.cs
- QilList.cs
- RadioButton.cs
- DataGridViewColumnTypePicker.cs
- RelatedImageListAttribute.cs
- ReferenceConverter.cs
- ModifyActivitiesPropertyDescriptor.cs
- UIntPtr.cs
- DataGridColumnReorderingEventArgs.cs
- CompressedStack.cs
- DataTableReader.cs
- X509Chain.cs
- ToolStripSystemRenderer.cs
- TypeGenericEnumerableViewSchema.cs
- ListBindableAttribute.cs
- TextSerializer.cs
- UnknownWrapper.cs
- XmlSchemaChoice.cs
- DataGridViewCellFormattingEventArgs.cs