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


Практическое руководство. Указание настраиваемой позиции всплывающего окна

В этом примере показано, как указать настраиваемую позицию для элемента управления 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)

См. полный пример в «Примере размещения всплывающего окна» .

См. также