2011-01-16 14 views
1

私は、画面上に四角形のグリッドを描画するカスタムコントロールを作成しました。これを行うには、OnRenderメソッドをオーバーライドし、長方形を描画します。WPF - カスタムコントロールScrollViewer

私はこのカスタムコントロールをWPFウィンドウに追加しました。しかし、ウィンドウのサイズを変更すると、カスタムコントロールの一部が非表示になります。私はスクロールバーが表示されますが、スクロールビューアを追加した後は何もしませんでした。

私はIScrollInfoを実装する必要がありますが、これは他の場所でも読んでいますが、これは非常に簡単なことを行うための多くの努力のようです。

誰かが私を助けることができたら、それは大いに感謝します。

多くのおかげで、

マット

答えて

2

ScrollViewerは任意のコンテンツをスクロールできるため、論理スクロール、つまりピクセルではなくラインでのサポートが必要な場合を除き、IScrollInfoを実装する必要はありません。

カスタムコントロールがMeasureOverrideを実装していない限り、レイアウトの測定段階には参加せず、ScrollViewerはスクロール可能領域を大きくしたいとは知らないでしょう。

<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

ScrollViewerはスクロールが必要であるかどうかについて決定因子としてその子のDesiredSizeを使用します。あなたのカスタムコントロールはMeasure()をオーバーライドしますか?カスタムコントロール用のコードを投稿すると、さらに役立つ必要があります。

+0

こんにちはケント:ここ

は、グラフ用紙の背景とスクロール可能Gridのcomple XAMLのみの例です。いいえ、私はその方法をオーバーライドしていません、私が言ったもの(OnRender)だけです。私のカスタムコントロールは、説明されているより少し複雑ですので、コードを投稿するのはちょっと混乱します。 –