Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Core / CSharp / System / Windows / Media / VisualTreeHelper.cs / 1 / VisualTreeHelper.cs
//------------------------------------------------------------------------------ // Microsoft Avalon // Copyright (c) Microsoft Corporation, 2003 // // File: VisualTreeHelper //----------------------------------------------------------------------------- using System; using System.Windows.Media; using System.Windows.Media.Media3D; using System.Windows.Media.Animation; using System.Windows.Threading; using System.Security.Permissions; using System.Windows.Media.Effects; using System.Collections; using System.Diagnostics; using MS.Internal; using MS.Internal.Media; using MS.Internal.PresentationCore; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; namespace System.Windows.Media { ////// The VisualTreeHelper class contains static methods that are useful for performing /// common tasks with visual tree nodes. Nodes in the visual tree may be Visual or /// Visual3Ds. /// /// When possible methods are typed to DependencyObject and may accept or /// return either type of visual tree node (e.g. GetParent). /// /// When the result of the operation is specific to 2D or 3D the methods are typed /// to Visual or Visual3D (e.g., GetDescendantBounds()). /// public static class VisualTreeHelper { private static void CheckVisualReferenceArgument(DependencyObject reference) { if (reference == null) { throw new ArgumentNullException("reference"); } } ////// Get the number of children of the specified Visual. /// public static int GetChildrenCount(DependencyObject reference) { Visual visual; Visual3D visual3D; VisualTreeUtils.AsNonNullVisual(reference, out visual, out visual3D); // x86 branch prediction skips the branch on first encounter. We favor 2D. if (visual3D != null) { return visual3D.InternalVisual2DOr3DChildrenCount; } // // Even though visual is a 2D visual, it still may have // 3D children. // return visual.InternalVisual2DOr3DChildrenCount; } ////// Returns the child of Visual visual at the specified index. /// public static DependencyObject GetChild(DependencyObject reference, int childIndex) { Visual visual; Visual3D visual3D; VisualTreeUtils.AsNonNullVisual(reference, out visual, out visual3D); // x86 branch prediction skips the branch on first encounter. We favor 2D. if (visual3D != null) { return visual3D.InternalGet2DOr3DVisualChild(childIndex); } // // Even though visual is a 2D visual, it still may have // 3D children. // return visual.InternalGet2DOr3DVisualChild(childIndex); } ////// Visual parent of this Visual. /// public static DependencyObject GetParent(DependencyObject reference) { Visual visual; Visual3D visual3D; VisualTreeUtils.AsNonNullVisual(reference, out visual, out visual3D); // x86 branch prediction skips the branch on first encounter. We favor 2D. if (visual3D != null) { return visual3D.InternalVisualParent; } return visual.InternalVisualParent; } ////// Equivalent to GetParent except that it does not VerifyAccess and only asserts /// in [FriendAccessAllowed] internal static DependencyObject GetParentInternal(DependencyObject reference) { Visual visual; Visual3D visual3D; VisualTreeUtils.AsVisualInternal(reference, out visual, out visual3D); if (visual != null) { return visual.InternalVisualParent; } if (visual3D != null) { return visual3D.InternalVisualParent; } Debug.Assert(reference == null); return null; } /// /// Returns the closest Visual that contains the given DependencyObject /// internal static Visual GetContainingVisual2D(DependencyObject reference) { Visual visual = null; while (reference != null) { visual = reference as Visual; if (visual != null) break; reference = VisualTreeHelper.GetParent(reference); } return visual; } ////// Returns the closest Visual3D that contains the given DependencyObject /// internal static Visual3D GetContainingVisual3D(DependencyObject reference) { Visual3D visual3D = null; while (reference != null) { visual3D = reference as Visual3D; if (visual3D != null) break; reference = VisualTreeHelper.GetParent(reference); } return visual3D; } internal static bool IsAncestorOf(DependencyObject reference, DependencyObject descendant) { Visual visual; Visual3D visual3D; VisualTreeUtils.AsNonNullVisual(reference, out visual, out visual3D); // x86 branch prediction skips the branch on first encounter. We favor 2D. if (visual3D != null) { return visual3D.IsAncestorOf(descendant); } return visual.IsAncestorOf(descendant); } internal static DependencyObject FindCommonAncestor(DependencyObject reference, DependencyObject otherVisual) { Visual visual; Visual3D visual3D; VisualTreeUtils.AsNonNullVisual(reference, out visual, out visual3D); // x86 branch prediction skips the branch on first encounter. We favor 2D. if (visual3D != null) { return visual3D.FindCommonVisualAncestor(otherVisual); } return visual.FindCommonVisualAncestor(otherVisual); } ////// Gets the clip of this Visual. /// public static Geometry GetClip(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualClip; } ////// Gets the opacity of the Visual. /// public static double GetOpacity(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualOpacity; } ////// Gets the OpacityMask. /// public static Brush GetOpacityMask(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualOpacityMask; } ////// Returns the offset of the Visual. /// public static Vector GetOffset(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualOffset; } ////// Returns the Visual transform. /// public static Transform GetTransform(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualTransform; } ////// Returns X-coordinate (vertical) guideline collection. /// public static DoubleCollection GetXSnappingGuidelines(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualXSnappingGuidelines; } ////// Returns Y-coordinate (horizontal) guideline collection. /// public static DoubleCollection GetYSnappingGuidelines(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualYSnappingGuidelines; } ////// GetDrawing returns the drawing content of the reference Visual /// public static DrawingGroup GetDrawing(Visual reference) { CheckVisualReferenceArgument(reference); return reference.GetDrawing(); } ////// GetContentBounds returns the bounding box for the contents of the specified visual. /// public static Rect GetContentBounds(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualContentBounds; } ////// GetContentBounds returns the bounding box for the contents of the specified visual. /// public static Rect3D GetContentBounds(Visual3D reference) { CheckVisualReferenceArgument(reference); return reference.VisualContentBounds; } ////// GetDescendantBounds returns the union of all of the content bounding /// boxes of the specified Visual's sub-graph. /// public static Rect GetDescendantBounds(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualDescendantBounds; } ////// GetDescendantBounds returns the union of all of the content bounding /// boxes of the specified Visual3D's sub-graph. /// public static Rect3D GetDescendantBounds(Visual3D reference) { CheckVisualReferenceArgument(reference); return reference.VisualDescendantBounds; } ////// Gets the BitmapEffect. /// public static BitmapEffect GetBitmapEffect(Visual reference) { CheckVisualReferenceArgument(reference); #pragma warning disable 0618 return reference.VisualBitmapEffect; #pragma warning restore 0618 } ////// Gets the BitmapEffectInput. /// public static BitmapEffectInput GetBitmapEffectInput(Visual reference) { CheckVisualReferenceArgument(reference); #pragma warning disable 0618 return reference.VisualBitmapEffectInput; #pragma warning restore 0618 } ////// Gets the Effect. /// public static Effect GetEffect(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualEffect; } ////// Gets the EdgeMode of the Visual. /// public static EdgeMode GetEdgeMode(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualEdgeMode; } ////// Return top most visual of a hit test. /// public static HitTestResult HitTest(Visual reference, Point point) { return HitTest(reference, point, true); } ////// [FriendAccessAllowed] internal static HitTestResult HitTest(Visual reference, Point point, bool include2DOn3D) { CheckVisualReferenceArgument(reference); return reference.HitTest(point, include2DOn3D); } ////// Initiate a hit test using delegates. /// public static void HitTest( Visual reference, HitTestFilterCallback filterCallback, HitTestResultCallback resultCallback, HitTestParameters hitTestParameters) { CheckVisualReferenceArgument(reference); reference.HitTest(filterCallback, resultCallback, hitTestParameters); } ////// Initiate a hit test using delegates. /// public static void HitTest( Visual3D reference, HitTestFilterCallback filterCallback, HitTestResultCallback resultCallback, HitTestParameters3D hitTestParameters) { CheckVisualReferenceArgument(reference); reference.HitTest(filterCallback, resultCallback, hitTestParameters); } #if WCP_MF_ENABLED ////// Serialize a visual to fixed (S0) XAML /// /// /// static internal void SaveAsXml(Visual visual, System.Xml.XmlWriter writer) { VisualTreeFlattener.SaveAsXml(visual, writer, new FixedXamlDesigner()); } ////// Walk a visual tree and flatten it to (S0) DrawingContext /// /// /// //CASRemoval:[StrongNameIdentityPermission(SecurityAction.LinkDemand, PublicKey=Microsoft.Internal.BuildInfo.WCP_PUBLIC_KEY_STRING)] static public void Walk(Visual visual, DrawingContext dc) { VisualTreeFlattener flattener = new VisualTreeFlattener(dc); flattener.Walk(visual, null); } #endif // WCP_MF_ENABLED } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ // Microsoft Avalon // Copyright (c) Microsoft Corporation, 2003 // // File: VisualTreeHelper //----------------------------------------------------------------------------- using System; using System.Windows.Media; using System.Windows.Media.Media3D; using System.Windows.Media.Animation; using System.Windows.Threading; using System.Security.Permissions; using System.Windows.Media.Effects; using System.Collections; using System.Diagnostics; using MS.Internal; using MS.Internal.Media; using MS.Internal.PresentationCore; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; namespace System.Windows.Media { ////// The VisualTreeHelper class contains static methods that are useful for performing /// common tasks with visual tree nodes. Nodes in the visual tree may be Visual or /// Visual3Ds. /// /// When possible methods are typed to DependencyObject and may accept or /// return either type of visual tree node (e.g. GetParent). /// /// When the result of the operation is specific to 2D or 3D the methods are typed /// to Visual or Visual3D (e.g., GetDescendantBounds()). /// public static class VisualTreeHelper { private static void CheckVisualReferenceArgument(DependencyObject reference) { if (reference == null) { throw new ArgumentNullException("reference"); } } ////// Get the number of children of the specified Visual. /// public static int GetChildrenCount(DependencyObject reference) { Visual visual; Visual3D visual3D; VisualTreeUtils.AsNonNullVisual(reference, out visual, out visual3D); // x86 branch prediction skips the branch on first encounter. We favor 2D. if (visual3D != null) { return visual3D.InternalVisual2DOr3DChildrenCount; } // // Even though visual is a 2D visual, it still may have // 3D children. // return visual.InternalVisual2DOr3DChildrenCount; } ////// Returns the child of Visual visual at the specified index. /// public static DependencyObject GetChild(DependencyObject reference, int childIndex) { Visual visual; Visual3D visual3D; VisualTreeUtils.AsNonNullVisual(reference, out visual, out visual3D); // x86 branch prediction skips the branch on first encounter. We favor 2D. if (visual3D != null) { return visual3D.InternalGet2DOr3DVisualChild(childIndex); } // // Even though visual is a 2D visual, it still may have // 3D children. // return visual.InternalGet2DOr3DVisualChild(childIndex); } ////// Visual parent of this Visual. /// public static DependencyObject GetParent(DependencyObject reference) { Visual visual; Visual3D visual3D; VisualTreeUtils.AsNonNullVisual(reference, out visual, out visual3D); // x86 branch prediction skips the branch on first encounter. We favor 2D. if (visual3D != null) { return visual3D.InternalVisualParent; } return visual.InternalVisualParent; } ////// Equivalent to GetParent except that it does not VerifyAccess and only asserts /// in [FriendAccessAllowed] internal static DependencyObject GetParentInternal(DependencyObject reference) { Visual visual; Visual3D visual3D; VisualTreeUtils.AsVisualInternal(reference, out visual, out visual3D); if (visual != null) { return visual.InternalVisualParent; } if (visual3D != null) { return visual3D.InternalVisualParent; } Debug.Assert(reference == null); return null; } /// /// Returns the closest Visual that contains the given DependencyObject /// internal static Visual GetContainingVisual2D(DependencyObject reference) { Visual visual = null; while (reference != null) { visual = reference as Visual; if (visual != null) break; reference = VisualTreeHelper.GetParent(reference); } return visual; } ////// Returns the closest Visual3D that contains the given DependencyObject /// internal static Visual3D GetContainingVisual3D(DependencyObject reference) { Visual3D visual3D = null; while (reference != null) { visual3D = reference as Visual3D; if (visual3D != null) break; reference = VisualTreeHelper.GetParent(reference); } return visual3D; } internal static bool IsAncestorOf(DependencyObject reference, DependencyObject descendant) { Visual visual; Visual3D visual3D; VisualTreeUtils.AsNonNullVisual(reference, out visual, out visual3D); // x86 branch prediction skips the branch on first encounter. We favor 2D. if (visual3D != null) { return visual3D.IsAncestorOf(descendant); } return visual.IsAncestorOf(descendant); } internal static DependencyObject FindCommonAncestor(DependencyObject reference, DependencyObject otherVisual) { Visual visual; Visual3D visual3D; VisualTreeUtils.AsNonNullVisual(reference, out visual, out visual3D); // x86 branch prediction skips the branch on first encounter. We favor 2D. if (visual3D != null) { return visual3D.FindCommonVisualAncestor(otherVisual); } return visual.FindCommonVisualAncestor(otherVisual); } ////// Gets the clip of this Visual. /// public static Geometry GetClip(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualClip; } ////// Gets the opacity of the Visual. /// public static double GetOpacity(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualOpacity; } ////// Gets the OpacityMask. /// public static Brush GetOpacityMask(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualOpacityMask; } ////// Returns the offset of the Visual. /// public static Vector GetOffset(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualOffset; } ////// Returns the Visual transform. /// public static Transform GetTransform(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualTransform; } ////// Returns X-coordinate (vertical) guideline collection. /// public static DoubleCollection GetXSnappingGuidelines(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualXSnappingGuidelines; } ////// Returns Y-coordinate (horizontal) guideline collection. /// public static DoubleCollection GetYSnappingGuidelines(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualYSnappingGuidelines; } ////// GetDrawing returns the drawing content of the reference Visual /// public static DrawingGroup GetDrawing(Visual reference) { CheckVisualReferenceArgument(reference); return reference.GetDrawing(); } ////// GetContentBounds returns the bounding box for the contents of the specified visual. /// public static Rect GetContentBounds(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualContentBounds; } ////// GetContentBounds returns the bounding box for the contents of the specified visual. /// public static Rect3D GetContentBounds(Visual3D reference) { CheckVisualReferenceArgument(reference); return reference.VisualContentBounds; } ////// GetDescendantBounds returns the union of all of the content bounding /// boxes of the specified Visual's sub-graph. /// public static Rect GetDescendantBounds(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualDescendantBounds; } ////// GetDescendantBounds returns the union of all of the content bounding /// boxes of the specified Visual3D's sub-graph. /// public static Rect3D GetDescendantBounds(Visual3D reference) { CheckVisualReferenceArgument(reference); return reference.VisualDescendantBounds; } ////// Gets the BitmapEffect. /// public static BitmapEffect GetBitmapEffect(Visual reference) { CheckVisualReferenceArgument(reference); #pragma warning disable 0618 return reference.VisualBitmapEffect; #pragma warning restore 0618 } ////// Gets the BitmapEffectInput. /// public static BitmapEffectInput GetBitmapEffectInput(Visual reference) { CheckVisualReferenceArgument(reference); #pragma warning disable 0618 return reference.VisualBitmapEffectInput; #pragma warning restore 0618 } ////// Gets the Effect. /// public static Effect GetEffect(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualEffect; } ////// Gets the EdgeMode of the Visual. /// public static EdgeMode GetEdgeMode(Visual reference) { CheckVisualReferenceArgument(reference); return reference.VisualEdgeMode; } ////// Return top most visual of a hit test. /// public static HitTestResult HitTest(Visual reference, Point point) { return HitTest(reference, point, true); } ////// [FriendAccessAllowed] internal static HitTestResult HitTest(Visual reference, Point point, bool include2DOn3D) { CheckVisualReferenceArgument(reference); return reference.HitTest(point, include2DOn3D); } ////// Initiate a hit test using delegates. /// public static void HitTest( Visual reference, HitTestFilterCallback filterCallback, HitTestResultCallback resultCallback, HitTestParameters hitTestParameters) { CheckVisualReferenceArgument(reference); reference.HitTest(filterCallback, resultCallback, hitTestParameters); } ////// Initiate a hit test using delegates. /// public static void HitTest( Visual3D reference, HitTestFilterCallback filterCallback, HitTestResultCallback resultCallback, HitTestParameters3D hitTestParameters) { CheckVisualReferenceArgument(reference); reference.HitTest(filterCallback, resultCallback, hitTestParameters); } #if WCP_MF_ENABLED ////// Serialize a visual to fixed (S0) XAML /// /// /// static internal void SaveAsXml(Visual visual, System.Xml.XmlWriter writer) { VisualTreeFlattener.SaveAsXml(visual, writer, new FixedXamlDesigner()); } ////// Walk a visual tree and flatten it to (S0) DrawingContext /// /// /// //CASRemoval:[StrongNameIdentityPermission(SecurityAction.LinkDemand, PublicKey=Microsoft.Internal.BuildInfo.WCP_PUBLIC_KEY_STRING)] static public void Walk(Visual visual, DrawingContext dc) { VisualTreeFlattener flattener = new VisualTreeFlattener(dc); flattener.Walk(visual, null); } #endif // WCP_MF_ENABLED } } // 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
- WebConfigManager.cs
- Setter.cs
- Set.cs
- DeleteIndexBinder.cs
- MimeReflector.cs
- CancellationState.cs
- Line.cs
- FrameworkName.cs
- WindowsRichEdit.cs
- SectionVisual.cs
- ListViewCancelEventArgs.cs
- InputReportEventArgs.cs
- DataGridRowsPresenter.cs
- UpdateInfo.cs
- MyContact.cs
- ProcessModelSection.cs
- DataSourceSelectArguments.cs
- UnsafeNativeMethodsMilCoreApi.cs
- TemplatePropertyEntry.cs
- UITypeEditors.cs
- HtmlHistory.cs
- SimpleTableProvider.cs
- OutKeywords.cs
- RelationshipManager.cs
- ObjectDataSourceView.cs
- FormatterConverter.cs
- XpsPartBase.cs
- ValidatingReaderNodeData.cs
- XamlStream.cs
- Internal.cs
- CheckedListBox.cs
- MatrixAnimationBase.cs
- RootBrowserWindow.cs
- GenericTypeParameterBuilder.cs
- SoapHeaders.cs
- Substitution.cs
- SoundPlayerAction.cs
- TimerElapsedEvenArgs.cs
- SqlSupersetValidator.cs
- InternalConfigEventArgs.cs
- ObjectCloneHelper.cs
- ByteAnimation.cs
- Bezier.cs
- DesignerAutoFormatStyle.cs
- FragmentQueryProcessor.cs
- ComponentResourceManager.cs
- DbQueryCommandTree.cs
- SafeProcessHandle.cs
- DocumentDesigner.cs
- AsyncWaitHandle.cs
- FilteredAttributeCollection.cs
- InternalPermissions.cs
- AcceleratedTokenProvider.cs
- SqlDataSourceFilteringEventArgs.cs
- GridViewRowCollection.cs
- DataGridTableCollection.cs
- GeneralTransform3D.cs
- TranslateTransform.cs
- HybridCollection.cs
- StreamWriter.cs
- SqlClientFactory.cs
- PanningMessageFilter.cs
- TextEditorSelection.cs
- Hex.cs
- Evidence.cs
- StrokeNodeData.cs
- AppDomainAttributes.cs
- XmlSchemaException.cs
- TransformGroup.cs
- DynamicDocumentPaginator.cs
- DataTablePropertyDescriptor.cs
- DefaultHttpHandler.cs
- AuthenticationException.cs
- WorkflowNamespace.cs
- WindowsListViewGroupSubsetLink.cs
- OdbcStatementHandle.cs
- SerializationException.cs
- TextEndOfParagraph.cs
- SystemIcmpV6Statistics.cs
- COM2FontConverter.cs
- formatter.cs
- LazyLoadBehavior.cs
- AutomationPatternInfo.cs
- WebDescriptionAttribute.cs
- EventBuilder.cs
- PackageRelationshipSelector.cs
- Compiler.cs
- SecurityPolicySection.cs
- TabRenderer.cs
- ProcessInfo.cs
- WmlTextBoxAdapter.cs
- KnownTypes.cs
- XmlDictionaryReaderQuotas.cs
- Classification.cs
- FilteredDataSetHelper.cs
- HtmlControl.cs
- SortQuery.cs
- JavascriptCallbackResponseProperty.cs
- MsmqIntegrationElement.cs
- WebPartConnectionsDisconnectVerb.cs