Postupy: Určení vlastního překryvného umístění

Tento příklad ukazuje, jak určit vlastní pozici Popup ovládacího prvku, když Placement je vlastnost nastavena na Custom.

Příklad

Pokud je vlastnost nastavena Placement na Custom, Popup volá definovanou instanci delegáta CustomPopupPlacementCallback . Tento delegát vrátí sadu možných bodů, které jsou relativní vzhledem k levému hornímu rohu cílové oblasti a levého horního Popuprohu . Umístění Popup probíhá v bodě, který poskytuje nejlepší viditelnost.

Následující příklad ukazuje, jak definovat pozici objektu nastavením PopupPlacement vlastnosti na Custom. Také ukazuje, jak vytvořit a přiřadit delegáta CustomPopupPlacementCallback k umístění Popup. Delegát zpětného volání vrátí dva CustomPopupPlacement objekty. Popup Pokud je skrytý okrajem obrazovky na první pozici, umístí se Popup na druhou pozici.

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

Kompletní ukázku naleznete v části Ukázka umístění místní nabídky.

Viz také