4

私はいくつかのWPF/C#を学習しているので、この質問は一部の人にとってはばかげているかもしれませんが、解決策を見つけることができません。

私はCanvas(テキストを数えるとしましょう)を持っていて、次にマスクとして使用したい別のCanvasを持っています(この2番目のCanvasのすべてが最初のCanvasをマスクします)。

どうやってやるの?2番目のキャンバスが動いている場合はどうなりますか?2番目のキャンバス(マスク)のスケールを変更して、最初のキャンバス(コンテンツ)のコンテンツを「公開」したいと思います。

前もって感謝します!

編集:キャンバスの代わりに長方形のようなものを使用できる場合(サイズが変更可能になり次第)、それも問題ありません!

編集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プロパティを代わりに使用したいと思うでしょう。CanvasBrush

質問に答えて編集する:次のようなことができます:

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グリッドに2つのキャンバスを埋め込むことから始める必要があります。

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

このようにして、キャンバスのコンテンツが互いに重なり合って描画されます。前景のキャンバスの内側に、長方形などを描くことができます。これがあなたのスタートに役立つことを願っています!

于 2009-05-20T12:48:40.127 に答える