Udostępnij za pośrednictwem


Instrukcje: określanie niestandardowej pozycji wyskakujących okienek

W tym przykładzie pokazano, jak określić pozycję niestandardową dla kontrolki Popup, gdy właściwość Placement jest ustawiona na Custom.

Przykład

Gdy właściwość Placement jest ustawiona na Custom, Popup wywołuje zdefiniowane wystąpienie delegata CustomPopupPlacementCallback. Ten delegat zwraca zestaw możliwych punktów względem lewego górnego rogu obszaru docelowego i lewego górnego rogu Popup. Umiejscowienie Popup ma miejsce w punkcie, który zapewnia najlepszą widoczność.

W poniższym przykładzie pokazano, jak zdefiniować położenie Popup przez ustawienie właściwości Placement na wartość Custom. Przedstawiono również sposób tworzenia i przypisywania delegata CustomPopupPlacementCallback, aby umieścić Popup. Delegat wywołania zwrotnego zwraca dwa obiekty CustomPopupPlacement. Jeśli Popup jest ukryta przez krawędź ekranu na pierwszej pozycji, Popup zostanie umieszczona na drugiej pozycji.

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

Aby zapoznać się z kompletną próbką, zobacz Próbka Umieszczania Okien Wyskakujących.

Zobacz też