2009-02-15 5 views
1

J'essaie d'apprendre WPF et jusqu'à présent je l'aime. Cependant, il manque quelque chose ou simplement quelque chose que je ne comprends pas. Comment pouvons-nous afficher plusieurs couches de contrôles dans WPF? En pièce jointe, la capture d'écran donne une bonne idée de ce que j'essaie de faire. J'ai une fenêtre et je veux afficher quelque chose d'autre dessus. Comment puis je faire ça?WPF et couches

Merci!

Screenshot http://www.freeimagehosting.net/uploads/3c087f7af6.png

Répondre

1

Je ne sais pas beaucoup sur WPF moi-même, mais est la propriété attachée Panel.ZIndex ce que vous êtes après, peut-être?

-2

Je ne sais pas exactement ce que vous essayez d'accomplir, mais de mes brèves rencontres avec WPF, il semble que vous pourriez accomplir ce dont vous avez besoin avec la bonne configuration d'une relation parent \ enfant entre vos deux fenêtres. J'ai récemment un basique "Bonjour, monde" sur le portail du Dr Dobb qui peut vous donner quelques indications.

Voici le lien vers la vidéo tutoriel de formation - Dr. Dobb's TV vous aurez juste besoin de sélectionner le « Construire une vidéo Standard WPF application dans la liste ...

4

Placer deux éléments dans la même ligne/colonne une grille les superpositions simplement Vous pouvez ensuite utiliser la visibilité sur chaque élément pour afficher/les cacher Ainsi, par exemple:..

<Grid> 
    ... row/column definitions 
    <Grid Grid.Row="0" Grid.Column="0"> 
     ... main content here 
    </Grid> 
    <Grid Grid.Row="0" Grid.Column="0" x:Name="grid2"> 
     ... overlaid content here 
    </Grid> 
</Grid> 

maintenant, le contenu superposé apparaîtra sur la partie supérieure du contenu contenu principal Réglage grid2.. Visibilité à Visible/Caché affichera/cachera votre contenu superposé

0

Vous pouvez obtenir un effet similaire en superposant des éléments dans une grille (les choses empilent les unes sur les autres si elles sont dans la même cellule), mais mon sens araignée me dirait que c'est juste une autre fenêtre définie quelque chose comme :

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="SubWindow" Height="100" Width="100" WindowStyle="None" AllowsTransparency="True" Opacity="0.5" > 

vous pouvez ensuite le montrer en vous la fenêtre principale en faisant quelque chose comme:

SubWindow sw = new SubWindow(); 
sw.DoModal(); 
2

Je peux penser à deux façons d'atteindre cet effet (non rectangulaire superposition semi-transparente sur le dessus d'une fenêtre qui s'étend derrière les limites de la fenêtre). NE PAS UTILISER CE CODE DANS LE CODE DE PRODUCTION (AllowTransparency est lent et très buggé) - Rend la fenêtre plus grande que le contenu réel, placez AllowsTransaprencey = "True" de sorte que la zone "outside" de la fenêtre est

transparent, maintenant tout ce que vous avez à faire pour la popup est d'ajouter un autre visuel dans le même conteneur que la "fenêtre".

Deuxième option, utilisez un popup, vous devrez positionner votre popup avec soin, appelez SetWindowRgn via interop pour le rendre non rectangulaire et appelez la fonction API Win32 qui définit la valeur de transparence (désolé, ne vous souvenez pas du nom à la moment) pour le rendre semi-transparent. La première option est facile à implémenter et sera meilleure que la deuxième option, mais elle est plus lente et vous rencontrerez toutes sortes de bogues bizarres (y compris des écrasements avec certains pilotes d'affichage) - Je le sais par expérience, quand je changé le logiciel que je vends de AllowTransparency à SetWindowRgn 90% des rapports d'écrasement ont disparu.

La deuxième option nécessite un grand nombre d'appels API Win32 natifs, mais cela devrait fonctionner.

2

vous pouvez utiliser adorner layer pour superposer. C'est fondamentalement une surface de rendu qui recouvre n'importe quel élément orné.