Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Core.Presentation / System / Activities / Core / Presentation / ConnectionPoint.cs / 1305376 / ConnectionPoint.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.Activities.Core.Presentation { using System.Windows; using System.Collections.Generic; using System.Windows.Shapes; using System.Diagnostics.CodeAnalysis; using System.Runtime; class ConnectionPoint : UIElement { //private UIElement visual; public static readonly DependencyProperty LocationProperty = DependencyProperty.Register("Location", typeof(Point), typeof(ConnectionPoint)); private ListattachedConnectors; private Point location; private UIElement parentDesigner; private ConnectionPointType pointType; // Size constants for the rectangle drawn internal const double DrawingSmallSide = 4; internal const double DrawingLargeSide = 10; // Size constants for the hit test area. internal const double HitTestSmallSide = 14; internal const double HitTestLargeSide = 20; public ConnectionPoint() { location = new Point(0, 0); pointType = ConnectionPointType.Default; attachedConnectors = new List (); this.parentDesigner = null; } public List AttachedConnectors { get { return this.attachedConnectors; } } public Point Location { get { return (Point)GetValue(ConnectionPoint.LocationProperty); } set { SetValue(ConnectionPoint.LocationProperty, value); } } // This is the vector from the point on the Edge to the topLeft of the rectangle being drawn. public Vector DrawingOffset { get { return GetOffset(DrawingSmallSide, DrawingLargeSide); } } // This is the vector from the point on the Edge to the topLeft of the rectangle being used for hit test. public Vector HitTestOffset { get { return GetOffset(HitTestSmallSide, HitTestLargeSide); } } // This is the size for the rectangle drawn (size is independent of coordinate system) public Size DrawingSize { get { return this.GetSize(ConnectionPoint.DrawingSmallSide, ConnectionPoint.DrawingLargeSide); } } // This is the size for the hit test area (size is independent of coordinate system) public Size HitTestSize { get { return this.GetSize(ConnectionPoint.HitTestSmallSide, ConnectionPoint.HitTestLargeSide); } } public UIElement ParentDesigner { get { return this.parentDesigner; } set { this.parentDesigner = value; } } public ConnectionPointType PointType { get { return this.pointType; } set { this.pointType = value; } } //Gets the list of Points representing the edge for the current ConnectionPoint with respect to the (0,0) of the FreeFormPanel. public List Edge { get { FrameworkElement parent = this.ParentDesigner as FrameworkElement; Fx.Assert(parent != null, "shape should be a FrameworkElement"); Point topLeft = FreeFormPanel.GetLocation(parent); topLeft.Offset(parent.Margin.Left, parent.Margin.Top); double parentWidth = parent.DesiredSize.Width - parent.Margin.Left - parent.Margin.Right; double parentHeight = parent.DesiredSize.Height - parent.Margin.Top - parent.Margin.Bottom; if (this.Location.X == topLeft.X) {//Left Edge return new List { topLeft, new Point(topLeft.X, topLeft.Y + parentHeight) }; } else if (this.Location.X == topLeft.X + parentWidth) {//Right edge return new List { new Point(topLeft.X + parentWidth, topLeft.Y), new Point(topLeft.X + parentWidth, topLeft.Y + parentHeight) }; } else if (this.Location.Y == topLeft.Y) {//Top Edge return new List { topLeft, new Point(topLeft.X + parentWidth, topLeft.Y) }; } else if (this.Location.Y == topLeft.Y + parentHeight) {//Bottom edge return new List { new Point(topLeft.X, topLeft.Y + parentHeight), new Point(topLeft.X + parentWidth, topLeft.Y + parentHeight) }; } return null; } } public EdgeLocation EdgeLocation { get; set; } // This is the vector from the point on the Edge to the topLeft of a rectangle with a particular (small, large) pair. Vector GetOffset(double small, double large) { return this.EdgeToDrawnMidPointOffset() + this.MidPointToTopLeftOffset(small, large); } // This is the vector from the point on the Edge to the topLeft of the "drawn" rectangle. Vector EdgeToDrawnMidPointOffset() { double small = ConnectionPoint.DrawingSmallSide; switch (this.EdgeLocation) { case EdgeLocation.Left: return new Vector(-small / 2, 0); case EdgeLocation.Right: return new Vector(small / 2, 0); case EdgeLocation.Top: return new Vector(0, -small / 2); case EdgeLocation.Bottom: return new Vector(0, small / 2); } Fx.Assert("There is no other possibilities for EdgeDirections"); // To please compiler return new Vector(); } // This is the vector from the midpoint of the rectangle to the topLeft of the rectangle with a particular (small, large) pair. Vector MidPointToTopLeftOffset(double small, double large) { Size rectSize = GetSize(small, large); return new Vector(-rectSize.Width / 2, -rectSize.Height / 2); } // This is the size for the rectangle with a particular (small, large) pair Size GetSize(double small, double large) { if (this.EdgeLocation == EdgeLocation.Left || this.EdgeLocation == EdgeLocation.Right) { return new Size(small, large); } else { return new Size(large, small); } } } enum EdgeLocation { Left, Right, Top, Bottom } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WorkflowRuntimeServiceElement.cs
- GridViewRowCollection.cs
- DemultiplexingDispatchMessageFormatter.cs
- PolyBezierSegment.cs
- RolePrincipal.cs
- TrackPointCollection.cs
- TemplateEditingFrame.cs
- FixedSOMTextRun.cs
- GeneratedView.cs
- XmlSerializerAssemblyAttribute.cs
- XmlDictionaryReader.cs
- HttpHandlerActionCollection.cs
- DesignerAutoFormat.cs
- FontDialog.cs
- ObjectMemberMapping.cs
- MessageHeaderException.cs
- NetTcpBindingCollectionElement.cs
- OperationAbortedException.cs
- BulletDecorator.cs
- HttpProxyCredentialType.cs
- HtmlInputText.cs
- compensatingcollection.cs
- Schema.cs
- FormViewInsertedEventArgs.cs
- InternalPermissions.cs
- EventListenerClientSide.cs
- AutomationProperty.cs
- SqlCachedBuffer.cs
- LineMetrics.cs
- SqlNamer.cs
- BindingOperations.cs
- EnumerableRowCollectionExtensions.cs
- OptimizedTemplateContentHelper.cs
- DataGridViewColumnHeaderCell.cs
- ObjectDataSourceDisposingEventArgs.cs
- ReferencedCategoriesDocument.cs
- ResourceDictionary.cs
- KnownTypeHelper.cs
- XmlFormatExtensionPrefixAttribute.cs
- CustomTrackingRecord.cs
- TextRenderingModeValidation.cs
- VarRefManager.cs
- ValidatorCompatibilityHelper.cs
- _LoggingObject.cs
- DataGridItemEventArgs.cs
- XmlTextReaderImplHelpers.cs
- GeometryModel3D.cs
- MultilineStringConverter.cs
- DetailsViewUpdatedEventArgs.cs
- LicenseException.cs
- InvalidProgramException.cs
- ValidationHelper.cs
- SecurityTokenTypes.cs
- AppDomainProtocolHandler.cs
- WorkflowTraceTransfer.cs
- DesignSurfaceEvent.cs
- BackgroundFormatInfo.cs
- securitycriticaldata.cs
- QuaternionAnimationUsingKeyFrames.cs
- Formatter.cs
- BaseCAMarshaler.cs
- EncryptionUtility.cs
- DBConnectionString.cs
- SessionStateContainer.cs
- WindowsListViewItemStartMenu.cs
- ListViewInsertionMark.cs
- SettingsPropertyValue.cs
- DateTimeAutomationPeer.cs
- XmlSchemaIdentityConstraint.cs
- CaseCqlBlock.cs
- TextServicesCompartmentEventSink.cs
- ToolboxDataAttribute.cs
- FamilyTypeface.cs
- KeyValueSerializer.cs
- DataPagerFieldCommandEventArgs.cs
- XPathAxisIterator.cs
- CellQuery.cs
- Operators.cs
- HelpInfo.cs
- ProviderException.cs
- ExtensionElementCollection.cs
- XmlArrayAttribute.cs
- QueryPageSettingsEventArgs.cs
- MenuCommandsChangedEventArgs.cs
- Compiler.cs
- BaseCollection.cs
- AssertFilter.cs
- Compiler.cs
- SpecularMaterial.cs
- InfoCardTrace.cs
- Span.cs
- RegexRunner.cs
- TargetException.cs
- FileSystemInfo.cs
- BitmapEffectInput.cs
- TextEditorCopyPaste.cs
- UnsafeNativeMethodsCLR.cs
- RecipientIdentity.cs
- ProcessHostFactoryHelper.cs
- IsolatedStoragePermission.cs