从定义了宽度和高度的代码中拉伸网格

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 像素。如果未设置宽度和高度,则矩形会拉伸,但我没有可使用的坐标。剪辑被注释掉了。

我只能在网格不需要宽度和高度的地方找到回答这个问题的帖子,但如果有人能指出我的答案或知道一些技巧,我将不胜感激。

谢谢。

【问题讨论】:

如果通过设置WidthHeight 属性来指定显式大小,Grid 将无法拉伸以填充可用空间。您想显示Grid 的哪一部分以及在哪里显示? 我使用网格作为覆盖。我定义了一些几何对象——矩形、圆形、它们的交点、联合等等——然后我用它们来剪掉网格的一部分。最终的几何对象是“PathGeometry”对象。 ('GridMask.Clip = pathGeometry')。当我可以预定义宽度和高度时,这很好用。但我想根据一些独立的坐标系(例如 100 x 100 或 1.0 x 1.0)来做几何图形,然后可以拉伸它以覆盖我视图中的父网格。也许可以改为拉伸几何对象,但我也不知所措。 【参考方案1】:

一位同事向我展示了一个简单的解决方法:

在构造函数中侦听GridMask.SizeChanged,并从GridMask_SizeChanged 方法调用剪辑函数。这为我们提供了一个可以从GridMask.ActualWidthGridMask.ActualHeight 使用的坐标系。

【讨论】:

以上是关于从定义了宽度和高度的代码中拉伸网格的主要内容,如果未能解决你的问题,请参考以下文章

CSS Grid将高度和宽度拉伸到容器[重复]

如何阻止网格单元在tailwindcss中水平拉伸?

如何在 Flutter 中拉伸图像以适合整个背景(100% 高度 x 100% 宽度)?

从字节数组数据中获取图像宽度和高度

使用 CSS 时画布会被拉伸,但“宽度”/“高度”属性正常

随着窗口大小的变化,如何在wpf中动态测量网格宽度/高度