画布大小作为包含元素的边界框

时间:2018-03-30 14:58:57

标签: c# wpf

我正在实现一个用户控件,它是一个形状排列的视图,可以使用鼠标移动和缩放,完全或单独。用户控件包含一个" Root"添加了形状的画布,其渲染变换确定了视图中的位置和大小。

我希望能够将画布的背景设置为包含其所有包含形状的矩形。这可能吗 ?当然我可以设置Width和Height属性,但它们似乎只从原点开始计算。但是形状也可以放在相对于画布的负坐标处。原点所以画布的背景矩形也必须从负坐标开始。

Canvas cnv = new Canvas();
// show the canvas' dimensions
cnv.Background = Brushes.AliceBlue;

for (int i = -5; i < 5; i++)
{
    for (int j = -5; j < 5; j++)
    {
        Rectangle newRectangle = new Rectangle();
        cnv.Children.Add(newRectangle);
        newRectangle.Width = 7;
        newRectangle.Height = 7;
        newRectangle.Fill = Brushes.Green;
        Canvas.SetTop(newRectangle, j * 10);
        Canvas.SetLeft(newRectangle, i * 10);
    }
}

// these are the right bounding dimensions, but with the wrong origin
cnv.Width = 107;
cnv.Height = 107;

// nothing available like that?
// cnv.Left = -50;
// cnv.Top= -50;

当然,如果一切都失败了,我可以为界限添加另一个矩形。

1 个答案:

答案 0 :(得分:1)

Canvas是透明的,所以为什么不将它堆叠在网格中的矩形顶部:

<Grid>
    <Rectangle Fill="Lime" Stroke="Red" StrokeThickness="5" />
    <Canvas />
</Grid>

或者它真的必须看起来像边框:

<Border Background="Lime" BorderBrush="Red" BorderThickness="5">
    <Canvas />
</Border>