Partager via


Guide pratique pour spécifier une position de popup personnalisée

Cet exemple montre comment spécifier une position personnalisée pour un contrôle Popup lorsque la propriété Placement est définie sur Custom.

Exemple :

Lorsque la propriété Placement est définie sur Custom, l'Popup appelle une instance définie du délégué CustomPopupPlacementCallback. Ce délégué retourne un ensemble de points possibles relatifs au coin supérieur gauche de la zone cible et au coin supérieur gauche de Popup. Le placement Popup se produit au point qui offre la meilleure visibilité.

L’exemple suivant montre comment définir la position d’un Popup en définissant la propriété Placement sur Custom. Il montre également comment créer et affecter un délégué CustomPopupPlacementCallback afin de positionner le Popup. Le délégué de rappel renvoie deux objets CustomPopupPlacement. Si la Popup est masquée par un bord d’écran à la première position, la Popup est placée à la deuxième position.

 <Popup Name="popup1"  
        PlacementTarget ="{Binding ElementName=myButton}" 
        Placement="Custom">
  <TextBlock Height="60" Width="200" 
             Background="LightGray"
             TextWrapping="Wrap">Popup positioned by using
  CustomPopupPlacement callback delegate</TextBlock>
</Popup>
public CustomPopupPlacement[] placePopup(Size popupSize,
                                           Size targetSize,
                                           Point offset)
{
    CustomPopupPlacement placement1 =
       new CustomPopupPlacement(new Point(-50, 100), PopupPrimaryAxis.Vertical);

    CustomPopupPlacement placement2 =
        new CustomPopupPlacement(new Point(10, 20), PopupPrimaryAxis.Horizontal);

    CustomPopupPlacement[] ttplaces =
            new CustomPopupPlacement[] { placement1, placement2 };
    return ttplaces;
}
Public Function placePopup(ByVal popupSize As Size, ByVal targetSize As Size, ByVal offset As Point) As CustomPopupPlacement()
    Dim placement1 As New CustomPopupPlacement(New Point(-50, 100), PopupPrimaryAxis.Vertical)

    Dim placement2 As New CustomPopupPlacement(New Point(10, 20), PopupPrimaryAxis.Horizontal)

    Dim ttplaces() As CustomPopupPlacement = { placement1, placement2 }
    Return ttplaces
End Function
popup1.CustomPopupPlacementCallback =
    new CustomPopupPlacementCallback(placePopup);
popup1.CustomPopupPlacementCallback = New CustomPopupPlacementCallback(AddressOf placePopup)

Pour obtenir l'exemple complet, consultez Exemple de placement de fenêtre contextuelle.

Voir aussi