c# - Scale canvas to mouse position -
i trying implement zoom-functionality canvas using mouse wheel. zooming center position of canvas using centerx="0.5" , centery="0.5". change behavior zooming happens @ mouse position , know if possible scaletransform.
currently use following code:
<canvas width="500" height="500"> <canvas.layouttransform> <scaletransform centerx="0.5" centery="0.5" scalex="{binding zoom}" scaley="{binding zoom}" /> </canvas.layouttransform> </canvas>
a basic approach zoom canvas (or other uielement) @ specific position use matrixtransform rendertransform property
<canvas width="500" height="500" mousewheel="canvas_mousewheel"> <canvas.rendertransform> <matrixtransform/> </canvas.rendertransform> </canvas> and update matrix property of transform in mousewheel handler:
private void canvas_mousewheel(object sender, mousewheeleventargs e) { var element = sender uielement; var position = e.getposition(element); var transform = element.rendertransform matrixtransform; var matrix = transform.matrix; var scale = e.delta >= 0 ? 1.1 : (1.0 / 1.1); // choose appropriate scaling factor matrix.scaleatprepend(scale, scale, position.x, position.y); transform.matrix = matrix; }
Comments
Post a Comment