12
votes

Flou le fond du conteneur WPF

En fin de compte, ce que je veux réaliser est une réplication à certains étendue, d'une fonctionnalité de verre Aero d'un contrôle de contenu WPF.

Si j'applique le blureffect à un StackPanel contenant un textblock , je vais avoir le textblock ' S texte flou.

Considérez des exemples:

pas de flou

pas flou

et avec

avec flou

mais y a-t-il une manière WPF pour brouiller le fond derrière le panneau, et pas son contenu?

L'arrière-plan du stackpanel est un ordinateur de bureau et la fenêtre qui l'héberge est définie sur allowTransparency = "vrai" pour permettre le look en forme personnalisé.


2 commentaires

Notez que le fond n'est pas flou dans votre deuxième image, juste le texte. Je ne suis pas sûr à quel point il sera facile d'obtenir l'effet que vous voulez. Ce quesiton dit quelque chose à propos de la mise en œuvre de shaders personnalisés ... Stackoverflow.com/questions/1304347/... peut-être que cela aiderait.


Découvrez également ce produit P / invoquez l'API de verre natif: Dotnet.dzone .Com / Articles / Aero-Glass-WPF-Windows


4 Réponses :


3
votes

Quel est le fond de la collerelle? une brosse image? Si oui, pourquoi ne pouvez-vous pas appliquer blureffect à cela?

Si cela n'est pas possible, essayez ceci ..

1] Utilisez une image et dessinez-la complètement sur grille comme je vois que vous ne voulez pas de Tileeffect . Ajouter Blureffect à cet image . Assurez-vous de remplir l'image le uniformément.

2] ajoutez stackpanel avec fond transparent comme enfant suivant dans la grille Ie ne pas inverser l'ordre d'image et StackPanel.

3] Ajoutez ensuite textblock dans StackPanel.

ou

Si vous insistez sur l'utilisation d'une brosse pour être défini comme le backgrounnd du panneau, utilisez VisualBrush qui dessine une image floue comme arrière-plan du stackpanel, au lieu de < Code> imagebrush .

Faites-moi savoir si l'une de ces conseils aident.


3 commentaires

Il essaie de brouiller l'arrière-plan de Windows Desktop pas un élément de WPF.


C'est ce que j'essaie de l'aider avec. Autant que je sache, les brosses ne peuvent pas être floues. Par conséquent, je lui ai donné des options pour brouiller l'image, puis le dessiner comme fond de StackPanel. Le même indice est déjà donné sur msdn ... social.msdn.microsoft.com/forums/en-us/wpf/thread/.../a>


Il n'a pas l'image dans son application.



12
votes

Non, ce n'est pas possible. L'effet est appliqué à l'élément et tous ses enfants mais vous pouvez facilement placer le texte de texte à l'extérieur du conteneur, plutôt que dans l'intérieur.

Normalement, vous utiliseriez une grille comme si: xxx

dans votre exemple qui ne fera aucune différence. Quoi, exactement, essayez-vous de brouiller?


1 commentaires

Vous devriez mettre l'image dans la partie qui a été floue. Notez que l'arrière-plan dans cette image n'est pas floue, même si le texte est ...



3
votes

Vous pouvez utiliser le SetWindowCompositionAttribute sur un système.Window, mais vous êtes alors obligé de définir le windowstyle sur "Aucun" et de mettre en œuvre votre propre fenêtre de fenêtrage natif et poignées. Héritage également d'un contrôle personnalisé est assez compliqué. Longue histoire courte, il y a des brouillons.

Vous pouvez le trouver via Nuget en naviguant pour "BlurryControls" ou consultez le code vous-même sur github . Soitway, j'espère que c'est utile. Il utilise .NET 4.5.2 et fonctionne uniquement pour Windows10, car il n'y a pas de solution à ce problème sur Windows8, et dans les versions antérieures (Windows7 et Vista), vous pouvez y parvenir en accédant à DwmenableBlurbehindwindow .

sur github, vous trouverez également une exemple d'application appelée BlurryWindowinvoker.


0 commentaires

0
votes

Vous pouvez appliquer ceci à une grille.

<Grid.Background>
   <VisualBrush>
       <VisualBrush.Visual>
          <Image Source="RESOURCES/BACKGROUNDS/BACKGROUND_01.jpg">
             <Image.BitmapEffect>
                <BlurBitmapEffect KernelType="Gaussian" Radius="20" />
             </Image.BitmapEffect>
          </Image>
       </VisualBrush.Visual>
    </VisualBrush>
 </Grid.Background>


1 commentaires

Pourquoi ne pas utiliser de propriété uielement.effect?