2010-05-13 73 views
9

我正在嘗試使用滾動條創建畫布。 任何人都可以幫助我提供一些關於如何做到這一點的想法? 我已經嘗試使用1行1列的網格,但由於某些約束我想使用畫布。如何在WPF畫布上繪製滾動條

在此先感謝!

回答

16

您可以將畫布放在滾動查看器中。我試過這個快速測試,它允許我滾動畫布的內容。

<ScrollViewer Height="100" Width="200"> 
    <Canvas Height="400" Width="400"> 
      //Content here 
    </Canvas> 
</ScrollViewer> 

編輯:這裏是僅在需要時的渦旋柱顯示了一個例子,它動態地改變作爲畫布大小的變化。

<Button Content="Change Canvas Size" Click="ChangeCanvasSize_Click"/> 
<ScrollViewer Height="100" Width="200" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> 
    <Canvas x:Name="TestCanvas"> 
      <TextBlock Text="Test Test"/> 
    </Canvas> 
</ScrollViewer> 

更改畫布大小與按鈕點擊:

private void ChangeCanvasSize_Click(object sender, RoutedEventArgs e) 
    { 
     TestCanvas.Width = 600; 
     TestCanvas.Height = 600; 
    } 

在這個例子中,我開始了,沒有滾動條,當我點擊按鈕,擴展畫布,滾動條顯示。

+0

感謝您的回覆。但事情是,我不知道我的畫布的大小,直到運行時。所以不能有一個固定大小的畫布。 如果用戶在現有畫布的邊界附近單擊,則會增加畫布的尺寸,那麼畫布寬度和/或高度將增加50單位,並顯示滾動條。 – Scooby 2010-05-13 19:00:11

+1

如果將滾動條的可見性設置爲「自動」,這應該仍然有效。我修改我的例子來說明。 – 2010-05-13 20:17:04

1

好吧,在使用它一段時間後,我想出了一個辦法。創建一個像這樣的XAML

<ScrollViewer> 
<Grid x:Name="drawingGrid" SizeChanged="drawingGrid_SizeChanged"> 
<Canvas Name="drawingCanvas"> /<Canvas> 
</Grid> 
</ScrollViewer> 

on windowLoad函數將畫布高度/寬度設置爲等於網格高度/寬度。更新畫布ht/wd:

  1. 當網格大小發生變化時,由於mininmize/maximize。
  2. 拖動的元素超出畫布的邊界或創建一個新的元素太近帆布

    的邊緣
    double dHeight = 220; 
    if (drawingCanvas.Height < CurrentPosition.Y + dHeight) 
    { 
        // increase canvas height 
        drawingCanvas.Height += (2 * dHeight); 
    } 
    

希望這是一些幫助。如果有人有任何更好的想法或建議來改善這一點,請分享。

0

通過結合馬里奧sannum的答案,你的問題,然後我做了應該在大多數情況下正常工作的解決方案..

<ScrollViewer> 
<Grid x:Name="drawingGrid" SizeChanged="drawingGrid_SizeChanged"> 
<Canvas Name="c"> 
<TextBlock x:Name="draw_Text" Text="Test Test"/> 
</<Canvas> 
</Grid> 
</ScrollViewer> 


void drawingGrid_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
     try { c.Height = draw_Text.ActualHeight; } catch { } 
     try { c.Width = draw_Text.ActualWidth; } catch { } 
} 

這應該調整畫布這樣的ScrollViewer可以滾動...