2012-04-02 6 views
1

In meiner Grafikanwendung gibt es einen Canvas-Bereich mit einer Grafik. Die Bildlaufleisten, die der X-Kordinate und der Y-Kordinate zugeordnet sind, müssen mit diesem Bildfensterbereich der Zeichenfläche synchronisiert sein (dort, wo die Grafik vorhanden ist). Wenn ein Benutzer auf eine Zoomtaste klickt, wird die Grafik vergrößert und verkleinert. Jetzt besteht das Problem darin, die Bildlaufleiste für dieses Zoomen einzustellen. Beim Ein- oder Auszoomen sollte das Ansichtsfenster der Bildlaufleiste mit dem Prozentsatz des Zooms synchronisiert sein.Einstellung der Größe der Bildlaufleiste in WPF basierend auf der Zoomfunktion

So legen Sie die Größe der Bildlaufleiste in diesem Fall fest. Ich habe das Maximum , Minimum und Wert Eigenschaft des Scrollbar und die gesamte Grafik Breite und Höhe mit dem Zoomfaktor.

Wie sollte ich die ViewportSize oder die Daumengröße der Bildlaufleiste einstellen?

verwenden ich den folgenden Code-Schnipsel, den Viewport zu bekommen, aber es ist nicht genau

mScrollBarY.ViewportSize = (double)yAxis.CurrentValueRange; 

wo die CurrentValueRange die im sichtbaren Bereich gezoomt gibt.

+1

Könnten Sie das nicht automatisch handhaben, indem Sie eine [LayoutTransform] (http://msdn.microsoft.com/en-us/library/system.windows.framework.layouttransform.aspx) auf Canvas anwenden und in eine [ ScrollViewer] (http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer.aspx)? – Clemens

Antwort

3

Hier sehe ich zwei Ansätze:

  1. Ansichtsfenster remaines die gleiche, während Umfang wächst, wie Sie die Ansicht vergrößern und verringert sich auf die Anzeigengröße, da während verkleinern. Sie müssen also Maximum
  2. Umfang bleibt gleich aktualisieren, während Ansichtsfenster bis zu Extentgröße wächst, wie Sie verkleinern und nimmt ab, wenn Sie die Ansicht vergrößern.

EDIT

In beiden Varianten Sie müssen einen Faktor definieren, um den Sie erhöhen oder verringern möchten. Lass es sein scale_factor. Hier ist das Verfahren zur Aktualisierung ScrollBar:

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

Vergrößern Handler:

scale_factor /= 2; 
updateScrollBar(); 

Auszoomen Handler:

scale_factor *= 2; 
updateScrollBar(); 

By the way, fand ich die folgende Formel auf msdn forum:

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

Ich verstehe nicht, wie wir Minimum und ViewportSize auf den gleichen Wert setzen können. – Kris

+0

Sie haben Recht, bitte überprüfen Sie meine Bearbeitung – EvAlex

Verwandte Themen