如何正确绘制和缩放Canvas作为控件的WPF背景?

时间:2017-09-12 11:47:12

标签: wpf xaml

我有StackPanel需要包含绘制的背景。具体来说,我的StackPanel需要具有增长的能力,矩形必须随StackPanel一起增长,但必须在固定位置保持伪锚定到每一侧。

我尝试使用Canvas.LeftCanvas.RightCanvas.TopCanvas.Bottom附加属性,但到目前为止他们还没有工作。此外,这在Canvas对象中绘制时似乎有效,而不是在它们作为背景嵌入VisualBrush集合时。如何在StackPanel

中完成绘制可调整大小的矩形背景

以下是我当前代码的状态。我尝试了各种方法,但似乎都没有。

我的代码:

<StackPanel DockPanel.Dock="Right" Orientation="Vertical" VerticalAlignment="Center">
    <StackPanel.Background>
        <VisualBrush Stretch="None">
            <VisualBrush.Visual> 
                <Canvas Background="Magenta" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                    Rectangle Fill="#FFDDECF7" Canvas.Left="20" Canvas.Top="20" Canvas.Bottom="20" Canvas.Right="0"/>
                </Canvas>
            </VisualBrush.Visual>
        </VisualBrush>
    </StackPanel.Background>
    ...
</StackPanel>

这目前无法呈现任何内容。我将画布背景设置为洋红色,这样我就可以看到它是否正在绘制,我甚至都没有看到它。其他尝试已经绘制了画布,但是,无论附加的画布属性设置如何,蓝色矩形总是被拉伸以填充窗口。

示例:

下面的图片是我想要的样本。我再次使用丑陋的洋红色来显示内部蓝色矩形的偏移。随着StackPanel的增大或缩小,矩形需要贴在顶部,左侧,右侧和底部。

enter image description here

2 个答案:

答案 0 :(得分:3)

我的建议是将stackpanel放在网格中:

<Grid DockPanel.Dock="Right" VerticalAlignment="Center" Background="Magenta">
    <Rectangle Margin="20" Fill="#FFDDECF7"/>
    <StackPanel Orientation="Vertical">
        no background...
    </StackPanel>

</Grid>

答案 1 :(得分:0)

Canvas换入ViewBox,然后处理ViewBox。据我所知Canvas并不能很好地支持scalling。