4

我正在学习一些 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;
4

2 回答 2

3

您可能想使用您的OpacityMask属性Canvas,它是 type 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" ... /> 

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

于 2009-05-20T01:24:37.017 回答
1

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

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

这样,画布的内容将被绘制在彼此之上。在前景画布内,您可以绘制矩形等。希望这有助于您开始!

于 2009-05-20T12:48:40.127 回答