使用Canvas屏蔽C#/ WPF中的另一个画布

时间:2009-05-20 01:19:31

标签: c# wpf canvas mask

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

我有一个Canvas(让我们说它计算文本)然后我有另一个Canvas我想用作一个掩码(第二个Canvas中的任何东西都会掩盖第一个)。

我该怎么做? 如果第二个Canvas正在移动怎么办?我想改变第二个画布(蒙版)的比例,以便“揭开”第一个画布(内容)的内容。

提前致谢!

编辑:如果不是画布,我可以使用类似矩形的东西(只要它可以调整大小),这也很好!

编辑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;

2 个答案:

答案 0 :(得分:3)

您可能希望使用Canvas上的OpacityMask property代替Brush类型,VisualBrush b = new VisualBrush(); b.Visual = canvas2; canvas2.OpacityMask = b; ,可以设置动画。

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

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

...

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

您也可以使用数据绑定在xaml中设置:

{{1}}

然而,对我而言,这似乎是不正确的方法,你到底是什么视觉转换?

答案 1 :(得分:1)

请注意,我不是WPF专家,但您应该首先在1x1网格中嵌入两个画布:

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

通过这种方式,画布的内容将相互叠加。在前景Canvas中,您可以绘制矩形等。希望这有助于您开始!