2009-05-20 3 views
4

일부 질문은 바보 일 수도 있지만 해결 방법을 찾을 수 없기 때문에 일부 WPF/C#을 배우고 있습니다.캔버스를 사용하여 C#/WPF에서 다른 캔버스를 마스킹합니다.

나는 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; 

답변

3

당신은 probabbly 대신 CanvasOpacityMask property를 사용하려면, 애니메이션 할 수있는 유형 Brush,이다 : 여기에 내가 사용하고 코드입니다. 질문에 대한 응답

편집 : 당신은 같은 작업을 수행 할 수 있습니다

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

... 

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

그러나, 나에게,이처럼 보인다 :

VisualBrush b = new VisualBrush(); 
b.Visual = canvas2; 
canvas2.OpacityMask = b; 

또한 데이터 바인딩과 XAML이 설정할 수 있습니다 부정확 한 접근법, 어떤 시각적 전환이 정확히 무엇입니까?

+0

감사합니다. 굉장히 유용하다. –

1

마음, 나는 어떤 WPF 전문가입니다,하지만 당신은 1x1 크기의 격자에 두 유세를 삽입 시작해야 다음 캔버스의 내용이 서로의 위에 그려집니다 이런 식으로

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

. 포 그라운드 캔버스 안에 사각형 등을 그릴 수 있습니다.

+0

제안 해 주셔서 감사합니다.하지만 정확히 내가 찾고있는 것이 아닙니다. 하나의 div를 다른 하나의 "div"로 덮고 싶지는 않지만 그 중 일부만 보여주고 싶습니다. (배경과 모든 것을 볼 수있는 반면 마스크는 내가 필요로하는 것입니다.) 감사합니다! – ozke

관련 문제