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

时间:2019-02-11 10:31:18

标签: c# wpf mvvm

我有一个在ViewModel中某个点定义的网格。

我想裁剪出此网格的某些区域,然后将其拉伸到屏幕的一部分,并在UI中显示为“叠加层”。要进行剪裁,我需要在网格上有某种坐标,但是如果设置其大小,它将拒绝拉伸。

ViewModel:

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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

一位同事给我看了一个简单的解决方法:

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