Oprócz odpowiedzi ima, wymyśliłem to za pomocą maski krycia. Korzystam z następującego kodu zahaczonego o zdarzenie LayoutUpdated dla obrazu.
// 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;
Jeśli chcesz uzyskać pożądane krycie bazy, użyj dwóch obrazów; taki, który zawsze znajduje się w podstawowym kryciu, a drugi używa maski krycia, która znajduje się na wierzchu. Jeśli chcesz, aby krycie bazowe było wyżej niż maskowane krycie, łatwiej będzie użyć podejścia ima.
Zaletą tego rozwiązania w przeciwieństwie do podejścia bezmasowego jest to, że jeśli sterowanie maskowaniem przesunie się, zmieni rozmiar itp., To automatycznie podniesie zmianę bez konieczności utrzymywania z nią kolejnej kontroli.
Oto jak to wygląda: http://img149.yfrog.com/img149/4183/99793865.jpg
Mam pomysł wykorzystania obraz lub kształt, który jest ukształtowany tak, kontrola jest ukształtowany i bawić z offset OpacityMask podczas przesuwania obiektu, ale że generalnie nie byłoby dobrym rozwiązaniem, szczególnie jeśli kontrola, którą chciałbyś użyć jako maski, jest dynamiczna (w moim przypadku taka nie jest). – nsantorello
Zapomniałem wspomnieć o przyczynie, dla której nie byłoby to na ogół dobrym rozwiązaniem, ponieważ gdybyś chciał jakiegoś rodzaju nieprzezroczystości bazy na obrazie (co, ja robię), musiałbyś zrobić ten obraz, który "podrabiał" kontrolę bardzo duże (w celu dostosowania do dużych przesunięć lub dużych maskowych obrazów). – nsantorello
właśnie dostałeś 34 powtórzenia, jak zaczęłaś nagrodę 150 rep? – Sadegh