我想创建一个带有滚动条的画布。 有谁能给我提供一些如何做到这一点的想法吗? 我已经尝试使用 1 行 1 列的网格,但由于某些限制,我想使用画布。
先行致谢!
我想创建一个带有滚动条的画布。 有谁能给我提供一些如何做到这一点的想法吗? 我已经尝试使用 1 行 1 列的网格,但由于某些限制,我想使用画布。
先行致谢!
您可以在一个滚动视图控件中放置画布。我进行了快速测试,它允许我滚动画布的内容。
<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;
}
在这个例子中,开始时没有滚动条,当我点击按钮扩展画布时,滚动条出现了。好的,在使用一段时间后,我找到了一种方法。创建一个像这样的XAML:
<ScrollViewer>
<Grid x:Name="drawingGrid" SizeChanged="drawingGrid_SizeChanged">
<Canvas Name="drawingCanvas"> /<Canvas>
</Grid>
</ScrollViewer>
dragging an element beyond the boundaries of canvas or creating a new element too close the edge of canvas
double dHeight = 220;
if (drawingCanvas.Height < CurrentPosition.Y + dHeight)
{
// increase canvas height
drawingCanvas.Height += (2 * dHeight);
}
<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 { }
}