我正在实现一个用户控件,它是一个形状排列的视图,可以使用鼠标移动和缩放,完全或单独。用户控件包含一个" 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;
当然,如果一切都失败了,我可以为界限添加另一个矩形。
答案 0 :(得分:1)
Canvas是透明的,所以为什么不将它堆叠在网格中的矩形顶部:
<Grid>
<Rectangle Fill="Lime" Stroke="Red" StrokeThickness="5" />
<Canvas />
</Grid>
或者它真的必须看起来像边框:
<Border Background="Lime" BorderBrush="Red" BorderThickness="5">
<Canvas />
</Border>