Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>If you don't want to use DeepZoom, you could also use a <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.viewbox(v=VS.95).aspx" rel="nofollow noreferrer">ViewBox</a> to contain the Image, and listen for the pinch touch gestures/events and zoom in and out of the ViewBox using a RenderTransform. </p> <p>Below is some code that I used for a Silverlight app, which with some work could be changed to react to Pinch and touch gestures instead of mousewheel + click/drag events. It might be possible to also change the amount of zoom depending on the "strength" of the pinch gesture.</p> <p>For a viewbox defined in XAML:</p> <pre><code> &lt;Border Name="viewboxBackground" Background="Black"&gt; &lt;Viewbox Name="viewboxMain"&gt; &lt;!--your content here --&gt; &lt;/Viewbox&gt; &lt;/Border&gt; </code></pre> <p>Codebehind:</p> <pre><code> #region Pan and Zoom Events and Handlers void MouseClickHandler(object sender, MouseButtonEventArgs e) { _mouseClickPos = e.GetPosition(viewboxBackground); bMoving = true; } void MouseMoveHandler(object sender, MouseEventArgs e) { if (bMoving) { //get current transform CompositeTransform transform = viewboxMain.RenderTransform as CompositeTransform; Point currentPos = e.GetPosition(viewboxBackground); transform.TranslateX += (currentPos.X - _mouseClickPos.X); transform.TranslateY += (currentPos.Y - _mouseClickPos.Y); viewboxMain.RenderTransform = transform; _mouseClickPos = currentPos; } } void MouseReleaseHandler(object sender, MouseButtonEventArgs e) { bMoving = false; } void MouseWheelZoom(object sender, MouseWheelEventArgs e) { if (e.Delta &gt; 0) { _zoomMultiplier += _zoomRate; ApplyZoomTransform(viewboxMain, _zoomMultiplier, new Point(viewboxMain.ActualWidth / 2, viewboxMain.ActualHeight / 2)); } else if (e.Delta &lt; 0 &amp;&amp; _zoomMultiplier &gt; 1) { _zoomMultiplier -= _zoomRate; ApplyZoomTransform(viewboxMain, _zoomMultiplier, new Point(viewboxMain.ActualWidth / 2, viewboxMain.ActualHeight / 2)); } } /// &lt;summary&gt; /// /// &lt;/summary&gt; /// &lt;param name="element"&gt;&lt;/param&gt; /// &lt;param name="iZoomFactor"&gt;&lt;/param&gt; /// &lt;param name="zoomCenter"&gt;If provided, the zoom will be centered around the given position.&lt;/param&gt; void ApplyZoomTransform(UIElement element, double iZoomFactor, Point? zoomCenter) { //get current transform CompositeTransform transform = viewboxMain.RenderTransform as CompositeTransform; if (zoomCenter != null) { transform.CenterX = zoomCenter.GetValueOrDefault().X; transform.CenterY = zoomCenter.GetValueOrDefault().Y; } transform.ScaleX = iZoomFactor; transform.ScaleY = iZoomFactor; element.RenderTransform = transform; } #endregion </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload