2009-06-22 90 views
0

我正在尝试绘制一些应用程序,并在我的“选择模式”中出现奇怪的结果。如果我绘制一个矩形并“选择它”,RenderSize会为其返回适当的大小,但如果选择了Line,则RenderSize将返回宽度设置为Line.X2且高度设置为Line.Y2的大小。例如:Line开始于X1 = 50,Y1 = 50,结束于X2 = 130,Y2 = 90,RenderSize返回Width = 130和Height = 90的Size。我的选择包含UIElement类型的元素,所以我不知道(并且真的不应该在乎)选择什么形状以便使我的选择模式尽可能通用,并且我希望在用户移动选定形状时绘制边界框。WPF - UIElement.RenderSize不适用于线形

尝试谷歌的问题,但没有发现任何相关的,所以也许你可以帮助我。是否因为矩形具有由Canvas设置的位置,而Line是否明确设置了其点?

回答

3

你得到130x90的原因是因为你引用的原因。 WPF中的矩形是无位置的,它只是一个高度/宽度,所以两个大小值是相等的。

但是,由点定义的线必然定义了与原点所需的偏移量,因此偏移量包含在边界框中。

另外请注意,您可以继续使用Canvas.Top/Left性能随你行目的是进一步抵消它,例如:

<Canvas> 
    <Line X1="50" X2="130" Y1="50" Y2="90" StrokeThickness="1" Stroke="Blue" Canvas.Top="50" Canvas.Left="30"></Line> 
    </Canvas> 
+0

那么,有没有什么办法通常检索适当大小(或东西喜欢它)的UIElement和基于它的显示边界框?我不喜欢对Line(或任何其他具有相同问题的Shape)进行特殊测试和处理的想法 – grapkulec 2009-06-23 12:34:09