Frage

Ich versuche, die OpacityMask Eigenschaft mit einem VisualBrush kombiniert zu verwenden, so dass, wenn Sie ziehen Sie ein Bild über eine andere Steuerung (wie ein anderes Bild, ein Rechteck oder jede andere Steuerung), der Teil des Bildes, das über die zweite ist Steuerung hat eine unterschiedliche Opazität. Das heißt, das Bild hat eine gewisse Nicht-Null-Basis Opazität, und ein Teil des Bildes, das über eine andere Steuerung ist eine andere (ebenfalls nicht Null) Opazität.

Ist das möglich, einfach VisualBrush und OpacityMask mit? Oder ist ein komplexerer Ansatz erforderlich?

Danke!

Edit: Ich versuche, das Bild hat etwas geringere Opazität (wie 0,5) zu machen, und der Teil über das Steuerelement gezogen wird, hat eine höhere Opazität (wie 1,0). Ich verließ ursprünglich dieses Detail aus, die den Ansatz wichtig ist.

War es hilfreich?

Lösung

Neben ima Antwort, ich habe dies herausgefunden eine Opazität Maske. Ich verwende den folgenden Code in dem für das Bild Ereignis Layoutupdated angeschlossen.

// 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;

Wenn Sie eine gewünschte Basis Opazität möchten, verwenden Sie zwei Bilder; eine, die immer an der Basis Opazität ist, und eine andere, die Opazität Maske verwendet, die auf ihm sitzt. Wenn Sie die Basis Opazität höher zu sein als die maskierte Opazität wollen, dann könnte es einfacher sein ima Ansatz zu verwenden.

Ein Vorteil dieser Lösung im Gegensatz zu dem maskenlosen Ansatz besteht darin, dass, wenn die Maskierungssteuerung bewegt, Größe ändert, usw., wird dies abholen automatisch die Änderung, ohne eine andere Steuerung synchron zu halten zu haben.

Hier ist, wie es aussieht:
(Quelle: yfrog.com )

Andere Tipps

  • Keine Masken
  • definieren visuelle Pinsel für die Steuerung
  • Farbe Form rechts oben auf der Steuerung mit dieser Bürste
  • Ziehen image zwischen die Form und die Kontrolle
  • Stellen Sie Deckkraft des Pinsels gewünschten Effekt zu erzielen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top