使用Canvas在C#/WPF中屏蔽另一个Canvas

使用Canvas在C#/WPF中屏蔽另一个Canvas,c#,wpf,canvas,mask,C#,Wpf,Canvas,Mask,我正在学习一些WPF/C,所以这个问题对你们中的一些人来说可能很愚蠢,但我找不到解决办法 我有一个画布(假设它包含文本),然后我有另一个画布,我想用作掩码(第二个画布中的任何内容都将屏蔽第一个画布) 我该怎么做? 如果第二块画布正在移动怎么办?我想更改第二个画布(遮罩)的比例,使其“公开”第一个画布(内容)的内容 提前谢谢 编辑:如果我可以用矩形代替画布(只要它可以调整大小),那也不错 编辑2:以下是我使用的代码: // Order info Canvas order_info = new Ca

我正在学习一些WPF/C,所以这个问题对你们中的一些人来说可能很愚蠢,但我找不到解决办法

我有一个画布(假设它包含文本),然后我有另一个画布,我想用作掩码(第二个画布中的任何内容都将屏蔽第一个画布)

我该怎么做? 如果第二块画布正在移动怎么办?我想更改第二个画布(遮罩)的比例,使其“公开”第一个画布(内容)的内容

提前谢谢

编辑:如果我可以用矩形代替画布(只要它可以调整大小),那也不错

编辑2:以下是我使用的代码:

// Order info
Canvas order_info = new Canvas();
order_info.Width = 220;
order_info.Height = 250;
order_info.Background = Brushes.Yellow;
user_info.Children.Add(order_info);
// Order info mask
Canvas order_info_mask = new Canvas();
order_info_mask.Width = 110;
order_info_mask.Height = 250;
order_info_mask.Background = Brushes.Pink;
user_info.Children.Add(order_info_mask);
// Apply mask
VisualBrush mask_brush = new VisualBrush();
mask_brush.Visual = order_info_mask;
order_info.OpacityMask = mask_brush;

您可能希望在
画布上使用
笔刷类型的,可以设置动画的

编辑以回答问题:您可以执行以下操作:

VisualBrush b = new VisualBrush();
b.Visual = canvas2;
canvas2.OpacityMask = b;
您还可以在xaml中通过数据绑定进行设置:

<Canvas>
    <Canvas.OpacityMask>
        <VisualBrush Visual="{Binding ElementName=canvas2}" />
    </Canvas.OpacityMask>
</Canvas>

...

<Canvas x:Name="canvas2" ... /> 

...

然而,对我来说,这似乎是不正确的方法,你到底是什么样的视觉过渡

记住,我不是WPF专家,但您应该先在1x1网格中嵌入两张画布:

<Grid>
   <Canvas x:Name="background">
   </Canvas>
   <Canvas x:Name="foreground">
   </Canvas>
</Grid>


这样,画布的内容将被绘制在彼此的顶部。在前景画布内,你可以画出你的矩形等。希望这有助于给你一个开始

谢谢你的建议,但这不是我想要的。我不想用另一个div来“覆盖”一个div,但只显示它的一部分(而你仍然可以看到背景和所有东西。所以我需要一个面具。谢谢!