イマの答えに加えて、私はこれを理解した不透明マスクを使用します。イメージのLayoutUpdatedイベントにフックされた次のコードを使用します。
// 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;
希望するベースの不透明度が必要な場合は、2つの画像を使用します。 1つは常に基底の不透明度にあり、もう1つはその上にある不透明マスクを使用します。ベースの不透明度をマスクされた不透明度よりも高くするには、imaのアプローチを使用する方が簡単かもしれません。マスクレスアプローチとは対照的に、この溶液の
一つの利点は、マスキング制御移動は、サイズなどを変更した場合、これは自動的に同期して他のコントロールを維持することなく、変更をピックアップすることです。ここで
は、それがどのように見えるかです: http://img149.yfrog.com/img149/4183/99793865.jpg
私はコントロールが形作られている方法で成形し、された画像や図形を使用するためにアイデアを持っているあなたがオブジェクトを移動するときOpacityMaskのオフセットが、それをいじり通常、マスクとして使用したいコントロールが動的である場合(私の場合はそうではありません)、良い解決策にはなりません。 – nsantorello
画像に基本的な不透明度が必要な場合(これは私が行う)、コントロールを非常に「偽」する必要があるため、一般的には良い解決策ではない理由を忘れています。大きい(大きなオフセットや大きなマスク可能な画像に対応するため)。 – nsantorello
あなたは34人の担当者を得ています。 – Sadegh