我正在学习一些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;
答案 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中,您可以绘制矩形等。希望这有助于您开始!