2010-11-18 43 views
6

Je veux ajouter un popup sur le clic d'un bouton dans WPF. Je ne veux pas ajouter de code Popup dans mon code XAML. Ça doit être du code derrière.Popup à partir du code derrière WPF ne fonctionne pas (sur le redimensionnement et le changement de Windows)

Mon XAML est le suivant ::

<Window x:Class="Test.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window1" Height="300" Width="300"> 
    <Grid> 
    <Button x:Name="button1" Click="button1_Click">Button</Button> 
    </Grid> 
</Window> 

Mon fichier XAML a un simple bouton. Au clic du bouton, j'essaye d'exécuter le code suivant.

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     Button button = sender as Button; 

     Popup codePopup = new Popup(); 
     TextBlock popupText = new TextBlock(); 
     popupText.Text = "Popup Text"; 
     popupText.Background = Brushes.LightBlue; 
     popupText.Foreground = Brushes.Blue; 
     codePopup.Child = popupText; 

     codePopup.PlacementTarget = button; 
     codePopup.IsOpen = true; 

    } 

Mais pourquoi est le menu contextuel ne se attacher à la fenêtre. Je veux dire que la fenêtre contextuelle est affichée même si je change de fenêtre. Aussi quand je redimensionner la fenêtre, Popup n'est plus placé près du bouton ??

Répondre

4

vous devez indiquer à la fenêtre contextuelle de s'afficher aussi.

codePopup.IsOpen = true; 

voir this blog pour un peu plus d'informations. Fondamentalement, votre popup n'est pas "lié" (ou "possédé") par un parent, il est indépendant de toute autre fenêtre et/ou contrôle (etc.) Malheureusement, il n'y a pas de facile moyen de contourner cela.

Vous devriez probablement télécharger l'exemple de position de démarrage à partir de MSDN here.

L'exemple de code utilise la classe CustomPopupPlacement avec un objet Rect et se lie aux décalages horizontaux et verticaux pour déplacer le menu contextuel.

+0

J'ai ajouté codePopup.IsOpen = true; Merci de son travail !! Mais pourquoi le popup ne se fixe pas à la fenêtre. Je veux dire que la fenêtre contextuelle est affichée même si je change de fenêtre. Aussi quand je redimensionne la fenêtre, Popup n'est plus placé près du bouton ?? – GuruC

+0

Merci beaucoup :) – GuruC

+0

@GuruC, avez-vous déjà trouvé comment créer Popup par programmation, mais l'avoir lui-même racine correctement afin que la popup se ferme lorsque vous cliquez à l'extérieur? – t9mike

2

Si vous voulez popup devrait se fermer automatiquement lorsque vous cliquez à l'extérieur de celui-ci puis définir codePopup.StaysOpen = false.So qu'il se fermera lorsque vous cliquez à l'extérieur de celui-ci.