Share via


Como especificar uma posição de pop-up personalizada

Este exemplo mostra como especificar uma posição personalizada para um Popup controle quando a Placement propriedade é definida como Custom.

Exemplo

Quando a Placement propriedade é definida como Custom, o Popup chama uma instância definida do CustomPopupPlacementCallback delegado. Esse delegado retorna um conjunto de pontos possíveis relativos ao canto superior esquerdo da área de destino e ao canto superior esquerdo do Popup. A Popup colocação ocorre no ponto que proporciona a melhor visibilidade.

O exemplo a seguir mostra como definir a posição de um Popup definindo a Placement propriedade como Custom. Ele também mostra como criar e atribuir um CustomPopupPlacementCallback delegado para posicionar o Popup. O delegado de retorno de chamada retorna dois CustomPopupPlacement objetos. Se o estiver oculto por uma borda de tela na primeira posição, o PopupPopup é colocado na segunda posição.

 <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)

Para ver o exemplo completo, confira Exemplo de posicionamento do pop-up.

Confira também