2008-10-09 13 views

Antwort

5

Nachdem Sie die Kommentare in der anderen Antwort gelesen haben - in der Sie angeben, dass Sie möchten, dass der Umriss der Form des Visuellen entspricht - kann ich nur vorschlagen, dass Sie sich die BitmapEffects ansehen. Es gibt einen für einen Outer Glow-Effekt.

Das Duplizieren der Bilder selbst wäre wahrscheinlich weniger effizient und würde wahrscheinlich eine große Anzahl von Komplikationen aufgrund anderer Aspekte dieser Objekte, wie etwa Bindungen, hervorrufen.

Edit: In .NET 4.0, BitmapEffects Eigenschaft und der BitmapEffect Klasse veraltet sind. Sie erhalten eine Ausnahme ausgelöst. Stattdessen haben Sie jetzt die Klasse System.Windows.Media.Effects.Effect und ihre abgeleiteten Klassen sowie Eigenschaften wie Visual.VisualEffect.

+0

lol, ich habe das gerade herausgefunden und wollte es jetzt posten. Ich schätze, du bekommst die Wiederholung. – Dylan

+0

Whee. Freut mich, dass du an den richtigen Stellen gesucht hast. :) –

+0

Netter Vorschlag, weiß nicht, warum ich nicht zuerst daran dachte ... vor allem gegeben, dass ich gerade eine Maus über den Effekt neulich gemacht habe. Ein Hinweis auf BitmapEffects ist jedoch, dass es sich um ein bekanntes Leistungsproblem handelt. Also pass auf das auf. – cplotts

1

Wenn Sie diese visuellen Objekte in einen Rahmen einbinden ... und die Deckkraft standardmäßig auf 0 setzen, können Sie die Deckkraft programmatisch bei Bedarf auf 1 stellen.

Hilft das?

+0

Wird der Rahmen immer ein Rechteck sein, oder wird er die Form des zugrunde liegenden Objekts annehmen? – Dylan

+0

Um meine eigene Frage zu beantworten, bleibt die Grenze ein Quadrat. Obwohl dies funktionieren kann, suche ich nach dem Umriss, der das Visual-Objekt ist. – Dylan

+0

In diesem Fall können Sie einfach das Visuelle duplizieren (oder den äußeren nicht rechteckigen "Rand" -Teil des Visuellen), aber geben Sie ihm etwas mehr Breite und ein wenig mehr Höhe (damit es wie eine Grenze aussieht) .. und dann natürlich den Opacity-Trick oben? Funktioniert das? – cplotts

5

Joel hat einen großartigen Vorschlag zur Verwendung von BitmapEffects. Wenn Sie .NET 3.5 SP1 verwenden können, würde ich Sie in Richtung GPU gerenderten Effekte steuern. Anstatt also UIElement.BitmapEffect zu verwenden, würden Sie UIElement.Effect verwenden. .NET 3.5 SP1 enthält zwei integrierte GPU-Effekte: BlurEffect und DropShadowEffect. Sie können auch Ihre eigenen GPU-Effekte erstellen ... und hier würden Sie ShaderEffect verwenden.

Weitere Informationen finden Sie in Greg Schechters Blogpost series.

hier ein Stück Code für eine Maus over-Effekt ist, dass ich vor ein paar Tagen gerade umgesetzt (es zeigt tatsächlich ein bisschen wie eine äußere Schein Bitmap-Effekt auf Grund der ShadowDepth 0 zu sein, aber nicht genau):

<Path 
    x:Name="mouseOverEffect" 
    Width="80" 
    Height="43.916" 
    Stretch="None" 
    Fill="#FFFFFFFF" 
    Opacity="0" 
> 
    <Path.Data> 
     <PathGeometry FillRule="Nonzero"> 
      <PathFigure IsClosed="True" StartPoint="39.9592899612151,25.9913931634531"> 
       <LineSegment Point="80.0000001464848,43.9159987905149"/> 
       <LineSegment Point="39.9513899394755,4.97379893856246E-14"/> 
       <LineSegment Point="1.77635636294422E-15,43.9159987905149"/> 
       <LineSegment Point="39.9592899612151,25.9913931634531"/> 
      </PathFigure> 
     </PathGeometry> 
    </Path.Data> 
    <Path.Effect> 
     <DropShadowEffect 
      Color="#FFFFFFFF" 
      BlurRadius="10" 
      ShadowDepth="0" 
     /> 
    </Path.Effect> 
</Path> 
+0

Leider kann ich SP1 noch nicht verwenden, da sich einige unserer Kunden in sehr eingeschränkten (dh staatlichen) Umgebungen befinden. – Dylan

Verwandte Themen