有人解释我在设置为NONE时对Rectangle的Stretch属性的误解吗?根据MSDN,该值的定义是“内容保留其原始大小”。看下面的代码。当我在第四个矩形上设置Stretch = NONE时,它会消失。
<Grid Margin="20">
<Rectangle Height="Auto" Width="2" HorizontalAlignment="Left" VerticalAlignment="Stretch" Fill="Black"/>
<Rectangle Height="2" Width="10" HorizontalAlignment="Left" VerticalAlignment="Top" Fill="Black"/>
<Rectangle Height="2" Width="10" HorizontalAlignment="Left" VerticalAlignment="Bottom" Fill="Black"/>
<Rectangle Stretch="None" Name="Right" Height="Auto" Width="2" HorizontalAlignment="Right" VerticalAlignment="Stretch" Fill="Black"/>
<Rectangle Height="2" Width="10" HorizontalAlignment="Right" VerticalAlignment="Top" Fill="Black"/>
<Rectangle Height="2" Width="10" HorizontalAlignment="Right" VerticalAlignment="Bottom" Fill="Black"/>
</Grid>
为什么会这样?此代码摘自我在自定义图表上使用的分页控件。我将分页控件包装在ViewBox中以允许自动调整大小,但我不希望我的边框标记调整大小(上面的示例是页面边框标记的样子)。
答案 0 :(得分:1)
Rectangle类使用私有_rect
字段进行渲染。
这是Rectangle.OnRender的代码:
protected override void OnRender(DrawingContext drawingContext)
{
...
drawingContext.DrawRoundedRectangle(base.Fill, pen, this._rect, this.RadiusX, this.RadiusY);
}
现在让我们看一下ArrangeOverride方法:
protected override Size ArrangeOverride(Size finalSize)
{
...
switch (base.Stretch)
{
case Stretch.None:
{
this._rect.Width = (this._rect.Height = 0.0);
break;
}
...
}
...
return finalSize;
}
似乎当Stretch in None时只有空矩形。您可能会看到它只添加一个笔画。也许这是一个错误。