Workaround: keep track of the alerts and their location
public partial class Form1 : Form
{
private Point location;
private Rectangle initialRect;
private bool displaySettingsChanged;
private RadDesktopAlert dAlert;
private HashSet<RadDesktopAlert> alerts;
public Form1()
{
InitializeComponent();
this.initialRect = Screen.PrimaryScreen.WorkingArea;
this.radDesktopAlert1.Popup.LocationChanged += Popup_LocationChanged;
Microsoft.Win32.SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;
}
private void Popup_LocationChanged(object sender, EventArgs e)
{
DesktopAlertPopup popup = sender as DesktopAlertPopup;
RadDesktopAlert alert = this.alerts.Where(a => a.Popup == popup).FirstOrDefault();
if ((alert.Popup.Location.X != this.location.X || alert.Popup.Location.Y != this.location.X) && this.displaySettingsChanged && Control.MouseButtons != MouseButtons.Left)
{
alert.Popup.Location = this.location;
}
}
private void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
{
this.displaySettingsChanged = true;
foreach (RadDesktopAlert alert in this.alerts)
{
this.AdjustPosition(alert);
}
}
private void AdjustPosition(RadDesktopAlert alert)
{
Rectangle newRect = Screen.PrimaryScreen.WorkingArea;
Point newLocation = DesktopAlertManager.Instance.GetAlertPopupLocation(alert);
this.location = new Point(newLocation.X - (initialRect.Width - newRect.Width), newLocation.Y - (initialRect.Height - newRect.Height));
alert.Popup.Location = this.location;
}
private void radButton1_Click(object sender, EventArgs e)
{
this.dAlert = new RadDesktopAlert();
this.dAlert.PopupAnimationFrames = 1;
this.dAlert.CanMove = false;
this.dAlert.Show();
if (this.alerts == null)
{
this.alerts = new HashSet<RadDesktopAlert>();
}
this.alerts.Add(this.dAlert);
this.dAlert.Popup.LocationChanged += Popup_LocationChanged;
if (this.displaySettingsChanged)
{
this.AdjustPosition(dAlert);
}
}
}