Поделиться через


Практическое руководство. Указание пользовательского расположения контекстного меню

В этом примере показано, как задать настраиваемое положение для элемента управления Popup, если свойство Placement имеет значение Custom.

Пример

Если свойство Placement имеет значение Custom, элемент Popup вызывает определенный экземпляр делегата CustomPopupPlacementCallback. Этот делегат возвращает набор возможных точек относительно верхнего левого угла целевой области и верхнего левого угла элемента Popup. Элемент Popup размещается в точке с лучшей видимостью.

В следующем примере показано, как определить положение элемента Popup, задав для свойства Placement значение Custom. В нем также показано, как создать и назначить делегат CustomPopupPlacementCallback для размещения элемента Popup. Делегат обратного вызова возвращает два объекта CustomPopupPlacement. Если элемент Popup скрыт краем экрана в первом положении, Popup размещается во втором положении.

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

Описание полного примера см. в разделе Пример размещения всплывающего окна.

См. также