2011-01-16 18 views
1

Ich habe ein benutzerdefiniertes Steuerelement erstellt, das einfach ein Raster aus Quadraten auf dem Bildschirm zeichnet. Um dies zu tun, überschreibt es die OnRender-Methode und zeichnet Rechtecke.WPF - benutzerdefinierte Steuerung ScrollViewer

Ich habe dieses benutzerdefinierte Steuerelement zu einem WPF-Fenster hinzugefügt. Wenn ich jedoch die Größe des Fensters ändere, ist ein Teil des benutzerdefinierten Steuerelements ausgeblendet. Was ich möchte, ist eine Bildlaufleiste, aber nach dem Hinzufügen eines Scroll-Viewer hat es nichts getan.

Ich habe woanders gelesen ich sollte IScrollInfo implementieren, aber das scheint wie eine Menge Aufwand, etwas ganz einfaches zu tun.

Wenn jemand mir helfen könnte, würde es sehr geschätzt werden.

Vielen Dank,

Matt

Antwort

2

Ein ScrollViewer kann beliebige Inhalte scrollen, so dass Sie IScrollInfo nicht implementieren müssen, es sei denn, Sie unterstützen das logische Scrollen, d. H. Nach Zeilen statt nach Pixeln.

Sofern Ihr benutzerdefiniertes Steuerelement implementiert MeasureOverride es wird nicht an der Maßnahme Phase des Layouts teilnehmen und eine ScrollViewer wird nicht groß wissen, dass Sie die scrollbare Region sein soll.

Hier ist ein comple XAML-einzige Beispiel einer scrollbaren Grid mit einem Millimeterpapier Hintergrund:

<DockPanel> 
    <ScrollViewer Height="200" Width="250" HorizontalScrollBarVisibility="Visible"> 
     <Grid Height="400" Width="400"> 
      <Grid.Background> 
       <DrawingBrush x:Name="GridBrush" 
        Viewport="0,0,10,10" ViewportUnits="Absolute" TileMode="Tile"> 
        <DrawingBrush.Drawing> 
         <DrawingGroup> 
          <GeometryDrawing Brush="#CCCCFF"> 
           <GeometryDrawing.Geometry> 
            <RectangleGeometry Rect="0,0 10,1" /> 
           </GeometryDrawing.Geometry> 
          </GeometryDrawing> 
          <GeometryDrawing Brush="#CCCCFF"> 
           <GeometryDrawing.Geometry> 
            <RectangleGeometry Rect="0,0 1,10" /> 
           </GeometryDrawing.Geometry> 
          </GeometryDrawing> 
         </DrawingGroup> 
        </DrawingBrush.Drawing> 
       </DrawingBrush> 
      </Grid.Background> 
     </Grid> 
    </ScrollViewer> 
</DockPanel> 
0

Die ScrollViewer wird für seine Kinder DesiredSize als Determinante verwenden, ob Scrollen notwendig ist. Überschreibt Ihr benutzerdefiniertes Steuerelement Measure()? Es wird wahrscheinlich erforderlich sein, den Code für Ihr benutzerdefiniertes Steuerelement zu veröffentlichen, um weiter zu helfen.

+0

Hallo Kent. Nein, ich habe diese Methode nicht außer Kraft gesetzt, nur die eine, die ich gesagt habe (OnRender). Meine benutzerdefinierte Steuerung ist ein wenig komplizierter als erklärt, so dass das Posten des Codes ein wenig verwirrend sein wird. –

Verwandte Themen