2010-05-19 3 views
4

J'ai un problème en utilisant VS2010 et la version 4 du framework avec des effets bitmap. Si j'ai le code ci-dessous et l'exécutez dans une application WPF à l'aide du profil client .NET Framework 4, l'effet bitmap n'apparaît pas. Si je définis la version du framework sur .NET Framework 3.5 Client Profile (et ne change pas de code), il s'exécute comme prévu. Au début, je pensais que c'était un problème dans ma demande, mais j'ai enlevé le code et l'ai mis dans une application autonome distincte et il se comporte de la même manière. Quelqu'un d'autre vérifie que le même problème se produit?.NET Framework 4 dans WPF ne montre pas l'effet bitmap

Que se passe-t-il ici?

La structure de la version 4 dans VS2010 semble simplement ignorer l'effet bitmap.

<Window.Resources> 
    <Style x:Key="SectionHeaderTextBlockStyle" TargetType="{x:Type TextBlock}"> 
     <Setter Property="FontFamily" Value="Segoe UI"/> 
     <Setter Property="FontSize" Value="18"/> 
     <Setter Property="FontWeight" Value="Bold"/> 
     <Setter Property="VerticalAlignment" Value="Center"/> 
     <Setter Property="Foreground" Value="LightGreen"/> 
     <Setter Property="BitmapEffect"> 
      <Setter.Value> 
       <OuterGlowBitmapEffect GlowColor="Black" GlowSize="3" /> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

<Grid VerticalAlignment="Center" HorizontalAlignment="Center"> 
    <TextBlock Text="Contact Details" Style="{DynamicResource SectionHeaderTextBlockStyle}"/> 
</Grid> 

Répondre

12

Comme déjà mentionné par d'autres: .NET 4.0 ne prend plus en charge BitmapEffects.

En tant Informations complémentaires: Comme il n'y a pas OuterGlowEffect que vous pouvez utiliser avec la propriété Effect (au moins pas que je suis au courant), vous pouvez remplacer l'effet bitmap avec un DropShadowEffect et définissez sa ShadowDepth propriété à 0. Vous pouvez ensuite créer un effet de lueur en ajustant la propriété BlurRadius. En outre, vous pouvez également ajuster la propriété Color si vous voulez que la lueur ait une autre couleur que le noir, mais comme je le vois dans votre exemple de code, vous utilisez effectivement le noir comme GlowColor.

Je sais que cette solution de contournement n'est peut-être pas aussi flexible et confortable que le OuterGlowBitmapEffect et qu'elle ne produit pas des résultats identiques, mais elle se rapproche plus ou moins de l'écriture d'un pixel shader.

+0

Merci, j'ai marqué ceci comme la réponse parce que vous avez également correctement noté que le OuterGlowEffect n'est plus soutenu et a suggéré une alternative. – Adrian

+0

+1: juste comme une note de côté: mettre le BlurRadius à 0 ou -1 vous donnera quelque chose de similaire mais vous n'obtiendrez pas le même aspect que si vous utilisiez le OuterGlowBitmapEffect –

+0

C'est vrai. Et c'est ce que j'ai essayé de dire avec * "pourrait ne pas être aussi flexible" *. Éditera ma réponse pour être plus précis. – gehho

3

BitmapEffects ne sont plus pris en charge dans .NET 4.0.

Vous devez utiliser la propriété Effect à la place.

Voir here pour plus de détails.

4

Comme indiqué here par Microsoft, BitmapEffect est obsolète à partir de .NET 4. Essayez d'utiliser Effect à la place.

1

Comme par this blog post:

5. Les classes BitmapEffect sont maintenant pas d'habitation.
BitmapEffect utilisé pour le rendu dans Logiciels et problèmes causés perf. BitmapEffect est toujours là pour que vos applications se compilent mais BitmapEffect ne fera rien.

0

Jetez un oeil à Bitmap Effects ce qui explique certains des problèmes liés à l'utilisation des nouveaux effets basés sur GPU.