2008-10-09 13 views

Odpowiedz

5

Po przeczytaniu komentarzy w drugiej odpowiedzi - w której oświadczasz, że chcesz, aby kontur był zgodny z kształtem wizualnym - mogę tylko zasugerować, abyś spojrzał na BitmapEffects. Jest jeden na efekt blasku zewnętrznego.

Samo duplikowanie wizualizacji byłoby prawdopodobnie mniej wydajne i prawdopodobnie spowodowałoby wiele komplikacji ze względu na inne aspekty tych elementów, takie jak wszelkie wiązania.

Edit: W .NET 4.0, BitmapEffects własności i klasy BitmapEffect są przestarzałe. Dostaniesz wyjątek. Zamiast tego masz teraz klasę System.Windows.Media.Effects.Effect i jej klasy pochodne oraz właściwości, takie jak Visual.VisualEffect.

+0

lol, właśnie to wymyśliłem i właśnie miałem to opublikować. Chyba masz przedstawiciela. – Dylan

+0

Whee. Cieszę się, że szukałeś w odpowiednich miejscach. :) –

+0

Niezła sugestia, nie wiem, dlaczego nie pomyślałem o tym wcześniej ... zwłaszcza, że ​​niedawno zrobiłem mysz nad efektem. Jedną z rzeczy, które należy zwrócić uwagę na BitmapEffects, jest to, że są one znanym problemem z wydajnością. Więc uważaj na to. – cplotts

1

Jeśli zawiniesz te obiekty Wizualne w Obramowanie ... i domyślnie utworzysz Opacity 0, to możesz programowo obrócić Krycie do 1, gdy zajdzie taka potrzeba.

Czy to pomaga?

+0

Czy obrzeże zawsze będzie prostokącie, czy będzie ono miało kształt leżącego pod nim obiektu? – Dylan

+0

Aby odpowiedzieć na moje własne pytanie, granica pozostanie kwadratem. Chociaż to może zadziałać, szukam, aby kontur był taki sam jak obiekt wizualny. – Dylan

+0

W takim przypadku można po prostu skopiować wizualną (lub zewnętrzną, nieprostokątną część wizualną), ale nadać jej nieco większą szerokość i trochę więcej wysokości (tak, aby wyglądała jak obramowanie). a następnie, oczywiście, użyć sztuczki Krycie powyżej? Czy to działa? – cplotts

5

Joel ma świetną sugestię na temat używania BitmapEffects.

Jednakże, jeśli możesz używać .NET 3.5 SP1, poprowadzę Cię w stronę GPU renderowanych efektów. Tak więc, zamiast używać UIElement.BitmapEffect, używałbyś UIElement.Effect. .NET 3.5 SP1 ma wbudowane dwa efekty GPU: BlurEffect i DropShadowEffect. Możesz także tworzyć własne efekty GPU ... i tutaj możesz użyć ShaderEffect.

Aby uzyskać więcej informacji, odwiedź blog na blogu Grega Schechtera: series.

Oto fragment kodu dla myszy nad mocą, że właśnie wdrożyliśmy kilka dni temu (faktycznie pojawia się coś w rodzaju zewnętrznej efekt poświata bitmapy powodu do ShadowDepth jest 0, ale nie dokładnie):

<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

Niestety, nie jestem w stanie używać dodatku SP1, ponieważ niektórzy z naszych klientów są w bardzo ograniczonym (tj. Rządowym) otoczeniu. – Dylan

Powiązane problemy