首页 > 解决方案 > 如何在拉伸容器时保持画布固定大小

问题描述

我正在尝试为图像制作一个非常简单的编辑器。由于控制面板显示在画布旁边,因此我想在它们之间放置一个边框(尽管我愿意接受像 GridSplitter 这样的建议)。我将画布嵌套在嵌套在边框中的 ScrollViewer 中。当图像加载到画布中时,如果我调整窗口大小,图像会随其他所有内容一起调整大小。由于我正在编辑此图像,因此我想将其保持为原始大小,如果 Canvas 太大,请使用 ScrollViewer 来处理它。我不知道是否更推荐将边框放在控制面板周围。

XAML 代码:

<Border BorderBrush="Black" BorderThickness="2" Grid.Column="2" Grid.Row="0" Grid.RowSpan="10" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <ScrollViewer x:Name="canvas_RosetteMap" Height="Auto" Width="Auto" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
        <Canvas Grid.Column="2" HorizontalAlignment="Center" Height="Auto" Grid.Row="0" Grid.RowSpan="10" VerticalAlignment="Center" Width="Auto"/>
    </ScrollViewer>
</Border>

标签: c#.netwpfcanvasborder

解决方案


你应该使用 aGrid代替。Canvas不擅长处理大小调整、滚动或类似的事情。这是一个应该与Image也一起使用的简单示例:

<Border BorderBrush="Black" BorderThickness="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <ScrollViewer x:Name="canvas_RosetteMap" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Visible">
        <Grid Width="Auto">
            <TextBox Background="Beige" VerticalAlignment="Top" HorizontalAlignment="Left"/>
        </Grid>
    </ScrollViewer>
</Border>

推荐阅读