2012-04-02 58 views
1

在我的图形应用程序中,有一些图形的画布区域。与x坐标和y坐标相关联的滚动条必须与画布的该视口区域(图形所在的位置)同步。 当用户单击缩放按钮时,图形将放大和缩小。现在的问题是为这个缩放设置滚动条。放大或缩小时,滚动条的视口应与缩放百分比同步。基于缩放在wpf中设置滚动条的缩略图大小

如何在这种情况下设置滚动条的大小。 我有滚动条 的最大最小价值财产和整个图的宽度和高度与zoomfactor。

我该如何设置ViewportSize或滚动条的大小?

我用下面的代码片段,以获得ViewportSize但其并不准确

mScrollBarY.ViewportSize = (double)yAxis.CurrentValueRange; 

其中CurrentValueRange给出可见光范围内的缩放。

+1

难道你不能通过向Canvas应用[LayoutTransform](http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.layouttransform.aspx)并将其放入[的ScrollViewer(http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer.aspx)? – Clemens 2012-04-02 12:45:04

回答

3

在这里我看到了两个办法:

  1. 视窗remaines相同,而程度成长,如您在放大和缩小时下降到视口大小。所以,你需要更新最大
  2. 程度保持不变,而视口长大到的范围大小,你缩小,并且随着你放大。

编辑

在这两个变种你需要定义一些增加或减少的因子。让它成为scale_factor。以下是更新ScrollBar方法:

void updateScrollBar() 
{ 
    scrollBar.Minimum = 0; 
    scrollBar.Maximum = extent; 
    scrollBar.ViewportSize = viewport * scale_factor; 
    scrollBar.SmallChange = 10 * scale_factor; 
} 

放大处理程序:

scale_factor /= 2; 
updateScrollBar(); 

缩小处理程序:

scale_factor *= 2; 
updateScrollBar(); 

顺便说一句,我发现下面的公式在msdn forum

ThumbSize = TrackLength * ViewportSize/(Maximum - Minimum + ViewportSize) 
+0

我不明白我们可以如何将Minimum和ViewportSize设置为相同的值。 – Kris 2012-04-03 04:04:14

+0

你是对的,请查看我的编辑 – EvAlex 2012-04-03 07:11:48