public void UpdateCallout()
{
if (Pinned)
{
MaxWidth = double.NaN;
Pos = new Thickness(0, 0, 0, 0);
//ContentVerticalAlignment = VerticalAlignment.Stretch;
ShowArrow = false;
CanClose = true;
CanPin = false;
ContentAlignment = HorizontalAlignment.Stretch;
GridAlignment = HorizontalAlignment.Stretch;
}
else
{
MaxWidth = Width;
ContentAlignment = HorizontalAlignment.Left;
ContentVerticalAlignment = VerticalAlignment.Top;
ShowArrow = true;
CanClose = true;
if (PinEnabled)
CanPin = true;
var p = AppStateSettings.Instance.ViewDef.MapControl.MapToScreen(Point);
switch (orientation)
{
case CallOutOrientation.Top:
Pos = new Thickness(p.X - Width / 2, 0, 0, AppStateSettings.Instance.ViewDef.MapControl.ActualHeight - p.Y + 20);
GridMargin = new Thickness(0, 0, 0, 20);
PathMargin = new Thickness(0, 0, 0, 0);
PathOrientation = 0.0;
PathHorizontalAlignment = HorizontalAlignment.Center;
GridAlignment = HorizontalAlignment.Center;
break;
case CallOutOrientation.Right:
PathVerticalAlignment = VerticalAlignment.Top;
PathOrientation = 90.0;
GridMargin = new Thickness(10, 0, 0, 0);
Pos = new Thickness(p.X + 20, Math.Max(p.Y - 100, 0), 0, Math.Min((p.Y), 0));
PathMargin = new Thickness(0, p.Y < 80 ? Math.Max(p.Y, -20) : 80, 0, 0);
PathHorizontalAlignment = HorizontalAlignment.Left;
GridAlignment = HorizontalAlignment.Left;
if (p.Y < -20 && mcov != null && mcov.Visibility == Visibility.Visible)
mcov.Visibility = Visibility.Collapsed;
else if (p.Y > -20 && mcov != null && mcov.Visibility == Visibility.Collapsed)
mcov.Visibility = Visibility.Visible;
break;
case CallOutOrientation.RightSideMenu:
PathVerticalAlignment = VerticalAlignment.Top;
PathOrientation = 90.0;
GridMargin = new Thickness(0, 0, 0, 0);
Pos = new Thickness(mcov.ActualWidth - Width, 0, 0, 0);
mcov.ContentGrid.Height = mcov.Height = (mcov.Parent as System.Windows.Controls.ContentControl).ActualHeight; // TODO Must be improved
mcov.ContentGrid.Width = Width;
PathMargin = new Thickness(0, 0, 0, 0);
PathHorizontalAlignment = HorizontalAlignment.Left;
GridAlignment = HorizontalAlignment.Left;
if (p.Y < -20 && mcov != null && mcov.Visibility == Visibility.Visible)
mcov.Visibility = Visibility.Collapsed;
else if (p.Y > -20 && mcov != null && mcov.Visibility == Visibility.Collapsed)
mcov.Visibility = Visibility.Visible;
break;
}
}
}