矩形拉伸属性行为

时间:2011-04-28 17:31:26

标签: wpf

有人解释我在设置为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中以允许自动调整大小,但我不希望我的边框标记调整大小(上面的示例是页面边框标记的样子)。

1 个答案:

答案 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时只有空矩形。您可能会看到它只添加一个笔画。也许这是一个错误。