Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Controls / DataGridColumnFloatingHeader.cs / 1305600 / DataGridColumnFloatingHeader.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // //--------------------------------------------------------------------------- using System; using System.Windows; using System.Windows.Controls.Primitives; using System.Windows.Media; using MS.Internal; namespace System.Windows.Controls { ////// The control which would be used to indicate the drag during column header drag-drop /// [TemplatePart(Name = "PART_VisualBrushCanvas", Type = typeof(Canvas))] internal class DataGridColumnFloatingHeader : Control { #region Constructors static DataGridColumnFloatingHeader() { DefaultStyleKeyProperty.OverrideMetadata( typeof(DataGridColumnFloatingHeader), new FrameworkPropertyMetadata(DataGridColumnHeader.ColumnFloatingHeaderStyleKey)); WidthProperty.OverrideMetadata( typeof(DataGridColumnFloatingHeader), new FrameworkPropertyMetadata(new PropertyChangedCallback(OnWidthChanged), new CoerceValueCallback(OnCoerceWidth))); HeightProperty.OverrideMetadata( typeof(DataGridColumnFloatingHeader), new FrameworkPropertyMetadata(new PropertyChangedCallback(OnHeightChanged), new CoerceValueCallback(OnCoerceHeight))); } #endregion #region Static Methods private static void OnWidthChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { DataGridColumnFloatingHeader header = (DataGridColumnFloatingHeader)d; double width = (double)e.NewValue; if (header._visualBrushCanvas != null && !DoubleUtil.IsNaN(width)) { VisualBrush brush = header._visualBrushCanvas.Background as VisualBrush; if (brush != null) { Rect viewBox = brush.Viewbox; brush.Viewbox = new Rect(viewBox.X, viewBox.Y, width - header.GetVisualCanvasMarginX(), viewBox.Height); } } } private static object OnCoerceWidth(DependencyObject d, object baseValue) { double width = (double)baseValue; DataGridColumnFloatingHeader header = (DataGridColumnFloatingHeader)d; if (header._referenceHeader != null && DoubleUtil.IsNaN(width)) { return header._referenceHeader.ActualWidth + header.GetVisualCanvasMarginX(); } return baseValue; } private static void OnHeightChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { DataGridColumnFloatingHeader header = (DataGridColumnFloatingHeader)d; double height = (double)e.NewValue; if (header._visualBrushCanvas != null && !DoubleUtil.IsNaN(height)) { VisualBrush brush = header._visualBrushCanvas.Background as VisualBrush; if (brush != null) { Rect viewBox = brush.Viewbox; brush.Viewbox = new Rect(viewBox.X, viewBox.Y, viewBox.Width, height - header.GetVisualCanvasMarginY()); } } } private static object OnCoerceHeight(DependencyObject d, object baseValue) { double height = (double)baseValue; DataGridColumnFloatingHeader header = (DataGridColumnFloatingHeader)d; if (header._referenceHeader != null && DoubleUtil.IsNaN(height)) { return header._referenceHeader.ActualHeight + header.GetVisualCanvasMarginY(); } return baseValue; } #endregion #region Methods and Properties public override void OnApplyTemplate() { base.OnApplyTemplate(); _visualBrushCanvas = GetTemplateChild(VisualBrushCanvasTemplateName) as Canvas; UpdateVisualBrush(); } internal DataGridColumnHeader ReferenceHeader { get { return _referenceHeader; } set { _referenceHeader = value; } } private void UpdateVisualBrush() { if (_referenceHeader != null && _visualBrushCanvas != null) { VisualBrush visualBrush = new VisualBrush(_referenceHeader); visualBrush.ViewboxUnits = BrushMappingMode.Absolute; double width = Width; if (DoubleUtil.IsNaN(width)) { width = _referenceHeader.ActualWidth; } else { width = width - GetVisualCanvasMarginX(); } double height = Height; if (DoubleUtil.IsNaN(height)) { height = _referenceHeader.ActualHeight; } else { height = height - GetVisualCanvasMarginY(); } Vector offset = VisualTreeHelper.GetOffset(_referenceHeader); visualBrush.Viewbox = new Rect(offset.X, offset.Y, width, height); _visualBrushCanvas.Background = visualBrush; } } internal void ClearHeader() { _referenceHeader = null; if (_visualBrushCanvas != null) { _visualBrushCanvas.Background = null; } } private double GetVisualCanvasMarginX() { double delta = 0; if (_visualBrushCanvas != null) { Thickness margin = _visualBrushCanvas.Margin; delta += margin.Left; delta += margin.Right; } return delta; } private double GetVisualCanvasMarginY() { double delta = 0; if (_visualBrushCanvas != null) { Thickness margin = _visualBrushCanvas.Margin; delta += margin.Top; delta += margin.Bottom; } return delta; } #endregion #region Data private DataGridColumnHeader _referenceHeader; private const string VisualBrushCanvasTemplateName = "PART_VisualBrushCanvas"; private Canvas _visualBrushCanvas; #endregion } } // 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
- ArgIterator.cs
- TreeBuilder.cs
- XmlObjectSerializerReadContextComplex.cs
- IdentityNotMappedException.cs
- FunctionMappingTranslator.cs
- ObjectViewQueryResultData.cs
- StatusBarAutomationPeer.cs
- ClassValidator.cs
- SubqueryTrackingVisitor.cs
- XmlSerializerFactory.cs
- TextEditorCharacters.cs
- PersistStreamTypeWrapper.cs
- OdbcConnectionStringbuilder.cs
- ErrorEventArgs.cs
- SchemaInfo.cs
- Volatile.cs
- translator.cs
- Roles.cs
- BaseResourcesBuildProvider.cs
- ScrollBar.cs
- ListenerElementsCollection.cs
- SqlDataSourceConnectionPanel.cs
- CompilationUnit.cs
- SequenceDesigner.cs
- QueryableDataSourceView.cs
- ExtentCqlBlock.cs
- UndirectedGraph.cs
- NoPersistProperty.cs
- DispatcherFrame.cs
- DataObjectMethodAttribute.cs
- IArgumentProvider.cs
- PipeSecurity.cs
- ScriptRegistrationManager.cs
- entitydatasourceentitysetnameconverter.cs
- ValueProviderWrapper.cs
- MetadataResolver.cs
- InternalControlCollection.cs
- CurrencyManager.cs
- LeaseManager.cs
- HorizontalAlignConverter.cs
- XamlWrapperReaders.cs
- ListBoxItem.cs
- BaseTemplateBuildProvider.cs
- DesignerTransaction.cs
- PerformanceCounterPermissionEntryCollection.cs
- ViewEventArgs.cs
- ApplicationException.cs
- IsolationInterop.cs
- DateTimeConverter.cs
- FileCodeGroup.cs
- Vector3D.cs
- DiscoveryClientChannelFactory.cs
- DigitShape.cs
- WebSysDescriptionAttribute.cs
- SerializationStore.cs
- SQLInt64Storage.cs
- HtmlInputRadioButton.cs
- DataBoundControlAdapter.cs
- EpmAttributeNameBuilder.cs
- ObjectDataSourceChooseMethodsPanel.cs
- SchemaMapping.cs
- XmlAttributes.cs
- Environment.cs
- IisTraceWebEventProvider.cs
- DriveNotFoundException.cs
- _Connection.cs
- RecordConverter.cs
- DependencyPropertyKey.cs
- TypeResolvingOptions.cs
- HttpWebRequest.cs
- MenuItemCollectionEditor.cs
- MemberPathMap.cs
- ButtonChrome.cs
- StylusPointPropertyInfoDefaults.cs
- SynchronizedInputAdaptor.cs
- TaiwanCalendar.cs
- HtmlHistory.cs
- CompilerError.cs
- ExecutionEngineException.cs
- TextSimpleMarkerProperties.cs
- ExtendedTransformFactory.cs
- Rect.cs
- PropagatorResult.cs
- InlinedAggregationOperatorEnumerator.cs
- OracleInfoMessageEventArgs.cs
- EventHandlersDesigner.cs
- TextAnchor.cs
- WindowsFormsHost.cs
- EventWaitHandleSecurity.cs
- COM2ExtendedTypeConverter.cs
- FileInfo.cs
- WebPartUserCapability.cs
- MessagePartDescriptionCollection.cs
- StorageAssociationTypeMapping.cs
- NetMsmqSecurityMode.cs
- Tool.cs
- KeyPressEvent.cs
- DeadCharTextComposition.cs
- PropertyChangeTracker.cs
- UserNamePasswordValidator.cs