如何:指定自訂 Popup 的位置
此範例示範如何在將 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)
如需完整範例,請參閱快顯位置範例 (英文)。