Практическое руководство. Определение пользовательского расположения контекстного меню
В этом примере показано, как указать положение условных 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;
}
popup1.CustomPopupPlacementCallback =
new CustomPopupPlacementCallback(placePopup);
Полный пример см. в разделе пример размещения всплывающего окна.