Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Framework / System / Windows / Automation / Peers / ScrollViewerAutomationPeer.cs / 1 / ScrollViewerAutomationPeer.cs
using System; using System.Globalization; using System.Runtime.InteropServices; using System.Security; using System.Text; using System.Windows; using System.Windows.Automation.Provider; using System.Windows.Controls; using System.Windows.Interop; using System.Windows.Media; using MS.Internal; using MS.Win32; namespace System.Windows.Automation.Peers { /// public class ScrollViewerAutomationPeer : FrameworkElementAutomationPeer, IScrollProvider { /// public ScrollViewerAutomationPeer(ScrollViewer owner): base(owner) {} /// override protected string GetClassNameCore() { return "ScrollViewer"; } /// override protected AutomationControlType GetAutomationControlTypeCore() { return AutomationControlType.Pane; } /// override protected bool IsControlElementCore() { // Return true if ScrollViewer is not part of the style return ((ScrollViewer)Owner).TemplatedParent == null; } /// override public object GetPattern(PatternInterface patternInterface) { if(patternInterface == PatternInterface.Scroll) return this; return null; } //-------------------------------------------------------------------- // // IScrollProvider // //------------------------------------------------------------------- ////// Request to scroll horizontally and vertically by the specified amount. /// The ability to call this method and simultaneously scroll horizontally /// and vertically provides simple panning support. /// ///void IScrollProvider.Scroll(ScrollAmount horizontalAmount, ScrollAmount verticalAmount) { if(!IsEnabled()) throw new ElementNotEnabledException(); bool scrollHorizontally = (horizontalAmount != ScrollAmount.NoAmount); bool scrollVertically = (verticalAmount != ScrollAmount.NoAmount); ScrollViewer owner = (ScrollViewer)Owner; if (scrollHorizontally && !HorizontallyScrollable || scrollVertically && !VerticallyScrollable) { throw new InvalidOperationException(SR.Get(SRID.UIA_OperationCannotBePerformed)); } switch (horizontalAmount) { case ScrollAmount.LargeDecrement: owner.PageLeft(); break; case ScrollAmount.SmallDecrement: owner.LineLeft(); break; case ScrollAmount.SmallIncrement: owner.LineRight(); break; case ScrollAmount.LargeIncrement: owner.PageRight(); break; case ScrollAmount.NoAmount: break; default: throw new InvalidOperationException(SR.Get(SRID.UIA_OperationCannotBePerformed)); } switch (verticalAmount) { case ScrollAmount.LargeDecrement: owner.PageUp(); break; case ScrollAmount.SmallDecrement: owner.LineUp(); break; case ScrollAmount.SmallIncrement: owner.LineDown(); break; case ScrollAmount.LargeIncrement: owner.PageDown(); break; case ScrollAmount.NoAmount: break; default: throw new InvalidOperationException(SR.Get(SRID.UIA_OperationCannotBePerformed)); } } /// /// Request to set the current horizontal and Vertical scroll position by percent (0-100). /// Passing in the value of "-1", represented by the constant "NoScroll", will indicate that scrolling /// in that direction should be ignored. /// The ability to call this method and simultaneously scroll horizontally and vertically provides simple panning support. /// ///void IScrollProvider.SetScrollPercent(double horizontalPercent, double verticalPercent) { if(!IsEnabled()) throw new ElementNotEnabledException(); bool scrollHorizontally = (horizontalPercent != (double)ScrollPatternIdentifiers.NoScroll); bool scrollVertically = (verticalPercent != (double)ScrollPatternIdentifiers.NoScroll); ScrollViewer owner = (ScrollViewer)Owner; if (scrollHorizontally && !HorizontallyScrollable || scrollVertically && !VerticallyScrollable) { throw new InvalidOperationException(SR.Get(SRID.UIA_OperationCannotBePerformed)); } if (scrollHorizontally && (horizontalPercent < 0.0) || (horizontalPercent > 100.0)) { throw new ArgumentOutOfRangeException("horizontalPercent", SR.Get(SRID.ScrollViewer_OutOfRange, "horizontalPercent", horizontalPercent.ToString(CultureInfo.InvariantCulture), "0", "100")); } if (scrollVertically && (verticalPercent < 0.0) || (verticalPercent > 100.0)) { throw new ArgumentOutOfRangeException("verticalPercent", SR.Get(SRID.ScrollViewer_OutOfRange, "verticalPercent", verticalPercent.ToString(CultureInfo.InvariantCulture), "0", "100")); } if (scrollHorizontally) { owner.ScrollToHorizontalOffset((owner.ExtentWidth - owner.ViewportWidth) * (double)horizontalPercent * 0.01); } if (scrollVertically) { owner.ScrollToVerticalOffset((owner.ExtentHeight - owner.ViewportHeight) * (double)verticalPercent * 0.01); } } /// /// Get the current horizontal scroll position /// ///double IScrollProvider.HorizontalScrollPercent { get { if (!HorizontallyScrollable) { return ScrollPatternIdentifiers.NoScroll; } ScrollViewer owner = (ScrollViewer)Owner; return (double)(owner.HorizontalOffset * 100.0 / (owner.ExtentWidth - owner.ViewportWidth)); } } /// /// Get the current vertical scroll position /// ///double IScrollProvider.VerticalScrollPercent { get { if (!VerticallyScrollable) { return ScrollPatternIdentifiers.NoScroll; } ScrollViewer owner = (ScrollViewer)Owner; return (double)(owner.VerticalOffset * 100.0 / (owner.ExtentHeight - owner.ViewportHeight)); } } /// /// Equal to the horizontal percentage of the entire control that is currently viewable. /// ///double IScrollProvider.HorizontalViewSize { get { ScrollViewer owner = (ScrollViewer)Owner; if (owner.ScrollInfo == null || DoubleUtil.IsZero(owner.ExtentWidth)) { return 100.0; } return Math.Min(100.0, (double)(owner.ViewportWidth * 100.0 / owner.ExtentWidth)); } } /// /// Equal to the vertical percentage of the entire control that is currently viewable. /// ///double IScrollProvider.VerticalViewSize { get { ScrollViewer owner = (ScrollViewer)Owner; if (owner.ScrollInfo == null || DoubleUtil.IsZero(owner.ExtentHeight)) { return 100f; } return Math.Min(100.0, (double)(owner.ViewportHeight * 100.0 / owner.ExtentHeight)); } } /// /// True if control can scroll horizontally /// ///bool IScrollProvider.HorizontallyScrollable { get { return HorizontallyScrollable; } } /// /// True if control can scroll vertically /// ///bool IScrollProvider.VerticallyScrollable { get { return VerticallyScrollable; } } private static bool AutomationIsScrollable(double extent, double viewport) { return DoubleUtil.GreaterThan(extent, viewport); } private static double AutomationGetScrollPercent(double extent, double viewport, double actualOffset) { if (!AutomationIsScrollable(extent, viewport)) { return ScrollPatternIdentifiers.NoScroll; } return (double)(actualOffset * 100.0 / (extent - viewport)); } private static double AutomationGetViewSize(double extent, double viewport) { if (DoubleUtil.IsZero(extent)) { return 100.0; } return Math.Min(100.0, (double)(viewport * 100.0 / extent)); } // Private *Scrollable properties used to determine scrollability for IScrollProvider implemenation. private bool HorizontallyScrollable { get { ScrollViewer owner = (ScrollViewer)Owner; return owner.ScrollInfo != null && DoubleUtil.GreaterThan(owner.ExtentWidth, owner.ViewportWidth); } } private bool VerticallyScrollable { get { ScrollViewer owner = (ScrollViewer)Owner; return owner.ScrollInfo != null && DoubleUtil.GreaterThan(owner.ExtentHeight, owner.ViewportHeight); } } // This helper synchronously fires automation PropertyChange events for every IScrollProvider property that has changed. // [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] internal void RaiseAutomationEvents(double extentX, double extentY, double viewportX, double viewportY, double offsetX, double offsetY) { IScrollProvider isp = (IScrollProvider)this; if (AutomationIsScrollable(extentX, viewportX) != isp.HorizontallyScrollable) { RaisePropertyChangedEvent( ScrollPatternIdentifiers.HorizontallyScrollableProperty, AutomationIsScrollable(extentX, viewportX), isp.HorizontallyScrollable); } if (AutomationIsScrollable(extentY, viewportY) != isp.VerticallyScrollable) { RaisePropertyChangedEvent( ScrollPatternIdentifiers.VerticallyScrollableProperty, AutomationIsScrollable(extentY, viewportY), isp.VerticallyScrollable); } if (AutomationGetViewSize(extentX, viewportX) != isp.HorizontalViewSize) { RaisePropertyChangedEvent( ScrollPatternIdentifiers.HorizontalViewSizeProperty, AutomationGetViewSize(extentX, viewportX), isp.HorizontalViewSize); } if (AutomationGetViewSize(extentY, viewportY) != isp.VerticalViewSize) { RaisePropertyChangedEvent( ScrollPatternIdentifiers.VerticalViewSizeProperty, AutomationGetViewSize(extentY, viewportY), isp.VerticalViewSize); } if (AutomationGetScrollPercent(extentX, viewportX, offsetX) != isp.HorizontalScrollPercent) { RaisePropertyChangedEvent( ScrollPatternIdentifiers.HorizontalScrollPercentProperty, AutomationGetScrollPercent(extentX, viewportX, offsetX), isp.HorizontalScrollPercent); } if (AutomationGetScrollPercent(extentY, viewportY, offsetY) != isp.VerticalScrollPercent) { RaisePropertyChangedEvent( ScrollPatternIdentifiers.VerticalScrollPercentProperty, AutomationGetScrollPercent(extentY, viewportY, offsetY), isp.VerticalScrollPercent); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Globalization; using System.Runtime.InteropServices; using System.Security; using System.Text; using System.Windows; using System.Windows.Automation.Provider; using System.Windows.Controls; using System.Windows.Interop; using System.Windows.Media; using MS.Internal; using MS.Win32; namespace System.Windows.Automation.Peers { /// public class ScrollViewerAutomationPeer : FrameworkElementAutomationPeer, IScrollProvider { /// public ScrollViewerAutomationPeer(ScrollViewer owner): base(owner) {} /// override protected string GetClassNameCore() { return "ScrollViewer"; } /// override protected AutomationControlType GetAutomationControlTypeCore() { return AutomationControlType.Pane; } /// override protected bool IsControlElementCore() { // Return true if ScrollViewer is not part of the style return ((ScrollViewer)Owner).TemplatedParent == null; } /// override public object GetPattern(PatternInterface patternInterface) { if(patternInterface == PatternInterface.Scroll) return this; return null; } //-------------------------------------------------------------------- // // IScrollProvider // //------------------------------------------------------------------- /// /// Request to scroll horizontally and vertically by the specified amount. /// The ability to call this method and simultaneously scroll horizontally /// and vertically provides simple panning support. /// ///void IScrollProvider.Scroll(ScrollAmount horizontalAmount, ScrollAmount verticalAmount) { if(!IsEnabled()) throw new ElementNotEnabledException(); bool scrollHorizontally = (horizontalAmount != ScrollAmount.NoAmount); bool scrollVertically = (verticalAmount != ScrollAmount.NoAmount); ScrollViewer owner = (ScrollViewer)Owner; if (scrollHorizontally && !HorizontallyScrollable || scrollVertically && !VerticallyScrollable) { throw new InvalidOperationException(SR.Get(SRID.UIA_OperationCannotBePerformed)); } switch (horizontalAmount) { case ScrollAmount.LargeDecrement: owner.PageLeft(); break; case ScrollAmount.SmallDecrement: owner.LineLeft(); break; case ScrollAmount.SmallIncrement: owner.LineRight(); break; case ScrollAmount.LargeIncrement: owner.PageRight(); break; case ScrollAmount.NoAmount: break; default: throw new InvalidOperationException(SR.Get(SRID.UIA_OperationCannotBePerformed)); } switch (verticalAmount) { case ScrollAmount.LargeDecrement: owner.PageUp(); break; case ScrollAmount.SmallDecrement: owner.LineUp(); break; case ScrollAmount.SmallIncrement: owner.LineDown(); break; case ScrollAmount.LargeIncrement: owner.PageDown(); break; case ScrollAmount.NoAmount: break; default: throw new InvalidOperationException(SR.Get(SRID.UIA_OperationCannotBePerformed)); } } /// /// Request to set the current horizontal and Vertical scroll position by percent (0-100). /// Passing in the value of "-1", represented by the constant "NoScroll", will indicate that scrolling /// in that direction should be ignored. /// The ability to call this method and simultaneously scroll horizontally and vertically provides simple panning support. /// ///void IScrollProvider.SetScrollPercent(double horizontalPercent, double verticalPercent) { if(!IsEnabled()) throw new ElementNotEnabledException(); bool scrollHorizontally = (horizontalPercent != (double)ScrollPatternIdentifiers.NoScroll); bool scrollVertically = (verticalPercent != (double)ScrollPatternIdentifiers.NoScroll); ScrollViewer owner = (ScrollViewer)Owner; if (scrollHorizontally && !HorizontallyScrollable || scrollVertically && !VerticallyScrollable) { throw new InvalidOperationException(SR.Get(SRID.UIA_OperationCannotBePerformed)); } if (scrollHorizontally && (horizontalPercent < 0.0) || (horizontalPercent > 100.0)) { throw new ArgumentOutOfRangeException("horizontalPercent", SR.Get(SRID.ScrollViewer_OutOfRange, "horizontalPercent", horizontalPercent.ToString(CultureInfo.InvariantCulture), "0", "100")); } if (scrollVertically && (verticalPercent < 0.0) || (verticalPercent > 100.0)) { throw new ArgumentOutOfRangeException("verticalPercent", SR.Get(SRID.ScrollViewer_OutOfRange, "verticalPercent", verticalPercent.ToString(CultureInfo.InvariantCulture), "0", "100")); } if (scrollHorizontally) { owner.ScrollToHorizontalOffset((owner.ExtentWidth - owner.ViewportWidth) * (double)horizontalPercent * 0.01); } if (scrollVertically) { owner.ScrollToVerticalOffset((owner.ExtentHeight - owner.ViewportHeight) * (double)verticalPercent * 0.01); } } /// /// Get the current horizontal scroll position /// ///double IScrollProvider.HorizontalScrollPercent { get { if (!HorizontallyScrollable) { return ScrollPatternIdentifiers.NoScroll; } ScrollViewer owner = (ScrollViewer)Owner; return (double)(owner.HorizontalOffset * 100.0 / (owner.ExtentWidth - owner.ViewportWidth)); } } /// /// Get the current vertical scroll position /// ///double IScrollProvider.VerticalScrollPercent { get { if (!VerticallyScrollable) { return ScrollPatternIdentifiers.NoScroll; } ScrollViewer owner = (ScrollViewer)Owner; return (double)(owner.VerticalOffset * 100.0 / (owner.ExtentHeight - owner.ViewportHeight)); } } /// /// Equal to the horizontal percentage of the entire control that is currently viewable. /// ///double IScrollProvider.HorizontalViewSize { get { ScrollViewer owner = (ScrollViewer)Owner; if (owner.ScrollInfo == null || DoubleUtil.IsZero(owner.ExtentWidth)) { return 100.0; } return Math.Min(100.0, (double)(owner.ViewportWidth * 100.0 / owner.ExtentWidth)); } } /// /// Equal to the vertical percentage of the entire control that is currently viewable. /// ///double IScrollProvider.VerticalViewSize { get { ScrollViewer owner = (ScrollViewer)Owner; if (owner.ScrollInfo == null || DoubleUtil.IsZero(owner.ExtentHeight)) { return 100f; } return Math.Min(100.0, (double)(owner.ViewportHeight * 100.0 / owner.ExtentHeight)); } } /// /// True if control can scroll horizontally /// ///bool IScrollProvider.HorizontallyScrollable { get { return HorizontallyScrollable; } } /// /// True if control can scroll vertically /// ///bool IScrollProvider.VerticallyScrollable { get { return VerticallyScrollable; } } private static bool AutomationIsScrollable(double extent, double viewport) { return DoubleUtil.GreaterThan(extent, viewport); } private static double AutomationGetScrollPercent(double extent, double viewport, double actualOffset) { if (!AutomationIsScrollable(extent, viewport)) { return ScrollPatternIdentifiers.NoScroll; } return (double)(actualOffset * 100.0 / (extent - viewport)); } private static double AutomationGetViewSize(double extent, double viewport) { if (DoubleUtil.IsZero(extent)) { return 100.0; } return Math.Min(100.0, (double)(viewport * 100.0 / extent)); } // Private *Scrollable properties used to determine scrollability for IScrollProvider implemenation. private bool HorizontallyScrollable { get { ScrollViewer owner = (ScrollViewer)Owner; return owner.ScrollInfo != null && DoubleUtil.GreaterThan(owner.ExtentWidth, owner.ViewportWidth); } } private bool VerticallyScrollable { get { ScrollViewer owner = (ScrollViewer)Owner; return owner.ScrollInfo != null && DoubleUtil.GreaterThan(owner.ExtentHeight, owner.ViewportHeight); } } // This helper synchronously fires automation PropertyChange events for every IScrollProvider property that has changed. // [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] internal void RaiseAutomationEvents(double extentX, double extentY, double viewportX, double viewportY, double offsetX, double offsetY) { IScrollProvider isp = (IScrollProvider)this; if (AutomationIsScrollable(extentX, viewportX) != isp.HorizontallyScrollable) { RaisePropertyChangedEvent( ScrollPatternIdentifiers.HorizontallyScrollableProperty, AutomationIsScrollable(extentX, viewportX), isp.HorizontallyScrollable); } if (AutomationIsScrollable(extentY, viewportY) != isp.VerticallyScrollable) { RaisePropertyChangedEvent( ScrollPatternIdentifiers.VerticallyScrollableProperty, AutomationIsScrollable(extentY, viewportY), isp.VerticallyScrollable); } if (AutomationGetViewSize(extentX, viewportX) != isp.HorizontalViewSize) { RaisePropertyChangedEvent( ScrollPatternIdentifiers.HorizontalViewSizeProperty, AutomationGetViewSize(extentX, viewportX), isp.HorizontalViewSize); } if (AutomationGetViewSize(extentY, viewportY) != isp.VerticalViewSize) { RaisePropertyChangedEvent( ScrollPatternIdentifiers.VerticalViewSizeProperty, AutomationGetViewSize(extentY, viewportY), isp.VerticalViewSize); } if (AutomationGetScrollPercent(extentX, viewportX, offsetX) != isp.HorizontalScrollPercent) { RaisePropertyChangedEvent( ScrollPatternIdentifiers.HorizontalScrollPercentProperty, AutomationGetScrollPercent(extentX, viewportX, offsetX), isp.HorizontalScrollPercent); } if (AutomationGetScrollPercent(extentY, viewportY, offsetY) != isp.VerticalScrollPercent) { RaisePropertyChangedEvent( ScrollPatternIdentifiers.VerticalScrollPercentProperty, AutomationGetScrollPercent(extentY, viewportY, offsetY), isp.VerticalScrollPercent); } } } } // 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
- WebEvents.cs
- EllipseGeometry.cs
- MemberListBinding.cs
- ProcessHost.cs
- EmissiveMaterial.cs
- DecoderReplacementFallback.cs
- BitArray.cs
- DataKey.cs
- SelectionChangedEventArgs.cs
- XmlUtil.cs
- WSDualHttpSecurityElement.cs
- DataServices.cs
- TopClause.cs
- VisualStyleElement.cs
- AdornerLayer.cs
- HttpHandlersSection.cs
- CharAnimationBase.cs
- StylusButton.cs
- WebDisplayNameAttribute.cs
- SoapException.cs
- DataListComponentEditor.cs
- DesignerLoader.cs
- CrossContextChannel.cs
- OpenFileDialog.cs
- SafeIUnknown.cs
- DataGridViewCellConverter.cs
- EventlogProvider.cs
- EntityChangedParams.cs
- Vector3DIndependentAnimationStorage.cs
- KeyInfo.cs
- ConfigXmlCDataSection.cs
- SqlProvider.cs
- SecurityException.cs
- BookmarkList.cs
- SetState.cs
- DbParameterCollectionHelper.cs
- DiscreteKeyFrames.cs
- MsmqActivation.cs
- XPathMultyIterator.cs
- wmiprovider.cs
- PageHandlerFactory.cs
- XmlAnyElementAttribute.cs
- DataPager.cs
- HtmlInputReset.cs
- Int32Rect.cs
- CommonObjectSecurity.cs
- BindingEntityInfo.cs
- XmlArrayItemAttribute.cs
- XmlDataSourceView.cs
- HiddenField.cs
- Compiler.cs
- SvcMapFileLoader.cs
- SiteOfOriginPart.cs
- HWStack.cs
- HtmlControlDesigner.cs
- ChtmlSelectionListAdapter.cs
- TransformedBitmap.cs
- TypefaceMetricsCache.cs
- BufferedWebEventProvider.cs
- SoapIncludeAttribute.cs
- SplitContainerDesigner.cs
- WindowsNonControl.cs
- DBNull.cs
- _ConnectionGroup.cs
- SqlDataSourceStatusEventArgs.cs
- ResourceKey.cs
- DataGridAddNewRow.cs
- NameObjectCollectionBase.cs
- FirstQueryOperator.cs
- _CacheStreams.cs
- ConstNode.cs
- SoapSchemaExporter.cs
- Table.cs
- BaseDataBoundControl.cs
- ObjectDataSourceMethodEditor.cs
- DataSpaceManager.cs
- EnumBuilder.cs
- LockedBorderGlyph.cs
- FileDialogPermission.cs
- PersonalizationDictionary.cs
- TriggerBase.cs
- WebPartZone.cs
- __TransparentProxy.cs
- NumericUpDownAccelerationCollection.cs
- IndentedTextWriter.cs
- TypeSchema.cs
- mediaclock.cs
- WsdlBuildProvider.cs
- _ConnectStream.cs
- EnterpriseServicesHelper.cs
- TextElementEditingBehaviorAttribute.cs
- List.cs
- InvokeHandlers.cs
- WebHttpSecurity.cs
- Publisher.cs
- Debug.cs
- QueueNameHelper.cs
- MappingItemCollection.cs
- SystemWebSectionGroup.cs
- PerformanceCounterPermissionEntry.cs