保持WPF画布中子项的相对位置

时间:2016-06-30 16:33:17

标签: wpf canvas scroll zoom

我想实现以下功能。

我的画布里面有几个UIElements。画布允许缩放和滚动应用比例并转换变换。

enter image description here

我想将红色方块始终保持在相同的位置(画布的左下角),以表现浮动控件,因此当我更改缩放或滚动时,红色方块始终保持它“#”;的大小和位置。类似于谷歌地图和#34;地球窗口":

enter image description here

实施它的最佳方法是什么?

注意:我尝试使用WPF adorner layer,但它不响应鼠标事件,我需要与红色方块进行交互。

1 个答案:

答案 0 :(得分:1)

正如克莱门斯所说,把它放在另一层上面。网格可以在同一个单元格中托管多个项目,因此为您的画布创建一个1个网格,在顶部添加内容,就像任何其他WPF布局一样。后面的项目显示在顶部(除非指定了Z层):

<Grid>
    <Canvas>
        ... do all my fancy drawing
    </Canvas>
    <Rectangle VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="100" Height="100" />
</Grid>

注意,如果画布具有任何非WPF渲染(例如视频或嵌入的WindowsForms内容),则可能会遇到问题。我已经看到人们在绘制WPF内容方面遇到了麻烦。

我也相信你可以设置Canvas.Bottom="20"来设置相对于下边缘的位置,但我从未使用它。