从定义了宽度和高度的代码中拉伸网格
Posted
技术标签:
【中文标题】从定义了宽度和高度的代码中拉伸网格【英文标题】:Stretch grid from code with width and height defined 【发布时间】:2019-02-11 10:31:18 【问题描述】:我有一个在我的 ViewModel 中定义的网格。
我想剪掉这个网格的一些区域,然后将其拉伸到屏幕的一部分,并在 UI 中将其显示为“覆盖”。要进行剪裁,我需要网格上的某种坐标,但如果我设置它的大小,它会拒绝拉伸。
视图模型:
Grid newGridMask = new Grid
Width = 100.0,
Height = 100.0,
Background = Brushes.Black,
Opacity = 0.5
;
//Clipping
GridMask = newGridMask;
//Does nothing:
//GridMask.HorizontalAlignment = HorizontalAlignment.Stretch;
//GridMask.VerticalAlignment = VerticalAlignment.Stretch;
查看:
<Grid>
<Canvas Name="MouseSpace" Background="Blue"/>
<ContentControl Content="Binding GridMask"/>
//I tried this too:
//<ContentControl Content="Binding GridMask" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</Grid>
矩形在蓝色背景上显示为较暗的矩形,但它只有 100 x 100 像素。如果未设置宽度和高度,则矩形会拉伸,但我没有可使用的坐标。剪辑被注释掉了。
我只能在网格不需要宽度和高度的地方找到回答这个问题的帖子,但如果有人能指出我的答案或知道一些技巧,我将不胜感激。
谢谢。
【问题讨论】:
如果通过设置Width
和Height
属性来指定显式大小,Grid
将无法拉伸以填充可用空间。您想显示Grid
的哪一部分以及在哪里显示?
我使用网格作为覆盖。我定义了一些几何对象——矩形、圆形、它们的交点、联合等等——然后我用它们来剪掉网格的一部分。最终的几何对象是“PathGeometry”对象。 ('GridMask.Clip = pathGeometry')。当我可以预定义宽度和高度时,这很好用。但我想根据一些独立的坐标系(例如 100 x 100 或 1.0 x 1.0)来做几何图形,然后可以拉伸它以覆盖我视图中的父网格。也许可以改为拉伸几何对象,但我也不知所措。
【参考方案1】:
一位同事向我展示了一个简单的解决方法:
在构造函数中侦听GridMask.SizeChanged
,并从GridMask_SizeChanged
方法调用剪辑函数。这为我们提供了一个可以从GridMask.ActualWidth
和GridMask.ActualHeight
使用的坐标系。
【讨论】:
以上是关于从定义了宽度和高度的代码中拉伸网格的主要内容,如果未能解决你的问题,请参考以下文章