如何:指定自定义弹出窗口位置

此示例演示如何在 Placement 属性设置为 Custom时为 Popup 控件指定自定义位置。

Placement 属性设置为 Custom时,Popup 将调用 CustomPopupPlacementCallback 委托的已定义实例。 此委托返回一组相对于目标区域的左上角和 Popup 的左上角的可能点。 在提供最佳可见性的位置放置 Popup

下面的示例演示如何通过将 Placement 属性设置为 Custom来定义 Popup 的位置。 它还演示如何创建和分配 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)

有关完整的示例,请参阅弹出项放置示例

另请参阅