The CanPopupExceedScreen=true setting is not taken into account when the parent window is moved. In that case if the popup reaches the edge of the screen, it will reposition so it doesn't go outside of it. This is the default behavior and setting CanPopupExceedScreen=true should disable it.
To work this around, you can override the OnLocationChanged method of the hosting window and invoke the private ForcePopupPosition method of CalloutPopupService, using a reflection.
protected override void OnLocationChanged(EventArgs e)
{
var popup = this.callout.ParentOfType<Popup>();
if (popup != null && popup.IsOpen)
{
var methodInfo = typeof(CalloutPopupService).GetMethod("ForcePopupPosition", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
methodInfo.Invoke(null, new object[1] { popup });
}
}
The CalloutPopupService Closed event is not raised when you click on a button inside of the RadCallout element. The issue will occur on click of any other element that steals the mouse capture from the RadCallout.
To work this around, you can get the Popup element that hosts the RadCallout and use its Closed event.
CalloutPopupService.Show(callout, frameworkElement, settings);
var popup = callout.ParentOfType<Popup>();
popupt.Closed += CalloutHost_Closed;
The callout gets clipped when the Content property is null and the ContentTemplate is set, as well as the arrow points are set to custom values.
The workaround for this is to set the Content property.