문제

나는 다른 컨트롤 (예 : 다른 이미지, 사각형 또는 다른 컨트롤과 같은 이미지) 위로 이미지를 드래그하면 두 번째 컨트롤 위에있는 이미지의 일부에는 다른 불투명도. 즉, 이미지에는 0이 아닌 기본 불투명도가 있으며 다른 컨트롤 위에있는 이미지의 일부는 다른 (0이 아닌) 불투명도를 갖습니다.

이것은 단순히 VisualBrush 및 불투명 마스크를 사용할 수 있습니까? 아니면 더 복잡한 접근법이 필요합니까?

감사!

편집 : 이미지의 불투명도가 낮고 (예 : 0.5), 컨트롤 위로 드래그되는 부분은 더 높은 불투명도 (예 : 1.0)를 갖도록하려고합니다. 나는 원래이 세부 사항을 제외 시켰는데, 이는 접근 방식에 중요합니다.

도움이 되었습니까?

해결책

IMA의 대답 외에도 불투명도 마스크를 사용하여 이것을 알아 냈습니다. 이미지의 레이아웃 업 이벤트에 연결된 다음 코드를 사용합니다.

// Make a visual brush out of the masking control.
VisualBrush brush = new VisualBrush(maskingControl);
// Set desired opacity.
brush.Opacity = 1.0;
// Get the offset between the two controls.
Point offset = controlBeingMasked.TranslatePoint(new Point(0, 0), maskingControl);
// Determine the difference in scaling.
Point scale = new Point(maskingControl.ActualWidth / controlBeingMasked.ActualWidth, 
    maskingControl.ActualHeight / controlBeingMasked.ActualHeight);
TransformGroup group = new TransformGroup();
// Set the scale of the mask.
group.Children.Add(new ScaleTransform(scale.X, scale.Y, 0, 0));
// Translate the mask so that it always stays in place.
group.Children.Add(new TranslateTransform(-offset.X, -offset.Y));
// Rotate it by the reverse of the control, to keep it oriented correctly.
// (I am using a ScatterViewItem, which exposes an ActualOrientation property)
group.Children.Add(new RotateTransform(-controlBeingMasked.ActualOrientation, 0, 0));
brush.Transform = group;
controlBeingMasked.OpacityMask = brush;

원하는 기본 불투명도를 원한다면 두 개의 이미지를 사용하십시오. 하나는 항상 기본 불투명도에 있고 다른 하나는 그 위에있는 불투명도 마스크를 사용하는 것입니다. 기본 불투명도가 마스크 된 불투명도보다 높기를 원한다면 IMA의 접근 방식을 사용하는 것이 더 쉬울 수 있습니다.

마스크리스 접근법과 달리이 솔루션의 장점 중 하나는 마스킹 제어가 움직이고 크기를 변경하는 경우 다른 컨트롤을 동기화하지 않고도 자동으로 변경 사항을 선택한다는 것입니다.

모습은 다음과 같습니다.
(원천: yfrog.com)

다른 팁

  • 마스크가 없습니다
  • 컨트롤을 위해 시각적 브러시를 정의하십시오
  • 그 브러시로 제어물 위에 페인트 모양
  • 이미지를 드래그하십시오 ~ 사이 모양과 제어
  • 브러시의 불투명도를 설정하여 원하는 효과를 달성하십시오
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top