Вы можете поместить холст внутри прокрутки. Я попробовал этот быстрый тест, и он позволил мне прокрутить содержимое холста.
<ScrollViewer Height="100" Width="200">
<Canvas Height="400" Width="400">
//Content here
</Canvas>
</ScrollViewer>
edit: Вот пример, где полосы прокрутки отображаются только при необходимости и динамически изменяются при изменении размера холста.
<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;
}
В этом примере я начинаю без полос прокрутки, и когда я нажимаю кнопку, чтобы развернуть холст, появляются полосы прокрутки.