195 public void CreatePopup(
string name, LoadedViewInfo loadedViewInfo,
double? popupWidth =
null,
double? popupHeight =
null,
bool centerOnScreen =
false)
197 FrameworkElement view = loadedViewInfo.View
198 ?? loadedViewInfo.FrameworkView
199 ??
throw new InvalidOperationException($
"Popup view '{name}' could not be created.");
201 object? viewModel = view.DataContext;
203 if (!Application.Current.Dispatcher.CheckAccess())
205 Application.Current.Dispatcher.Invoke(() =>
CreatePopup(name, loadedViewInfo, popupWidth, popupHeight, centerOnScreen));
209 var owner = Application.Current?.MainWindow;
213 view.Measure(
new Size(
double.PositiveInfinity,
double.PositiveInfinity));
214 var desired = view.DesiredSize;
216 if (loadedViewInfo.View ==
null)
222 DataContext = viewModel,
223 WindowStartupLocation = WindowStartupLocation.CenterScreen,
224 WindowStyle = WindowStyle.None,
225 ResizeMode = ResizeMode.NoResize,
226 Background = Brushes.White,
227 Width = desired.Width,
229 ShowInTaskbar =
false,
239 DataContext = viewModel,
240 WindowStartupLocation = WindowStartupLocation.CenterOwner,
241 WindowStyle = WindowStyle.None,
242 ResizeMode = ResizeMode.NoResize,
247 ShowActivated =
true,
248 Background = Brushes.White,
249 Width = desired.Width,
251 ShowInTaskbar =
false,
257 popup.Width = popupWidth ??
Width;
258 popup.Height = popupHeight ??
Height;
261 popup.Tag = centerOnScreen;
264 if (owner !=
null && owner.IsLoaded && owner.IsVisible)
272 Debug.WriteLine($
"[Popup] Owner 설정 실패({name}): {ex.Message}");
279 popup.WindowStartupLocation = WindowStartupLocation.CenterScreen;
283 if (owner !=
null && !owner.IsVisible)
285#pragma warning disable CS1587
312 void OnOwnerReady(object? s, EventArgs e)
314 owner!.ContentRendered -= OnOwnerReady;
316 if (!popup.IsVisible)
328 Debug.WriteLine($
"[Popup] ContentRendered Owner 설정 실패({name}): {ex.Message}");
333#pragma warning restore CS1587
335 owner.ContentRendered += OnOwnerReady;
336 popup.Closed += (_, _) => owner!.ContentRendered -= OnOwnerReady;
339 popup.Loaded += (s, e) => popup.Hide();
344 popup.IsVisibleChanged += (_, __) =>
346 if (!popup.IsVisible)
353 popup.Closing += (s, e) =>
358 var app = Application.Current;
359 bool ownerDead = owner ==
null || !owner.IsLoaded;
360 bool appShuttingDown = app is { ShutdownMode: ShutdownMode.OnExplicitShutdown } && app.MainWindow ==
null;
362 if (ownerDead || appShuttingDown)
403 bool centerOnScreen = popup.Tag is
true;
407 var screenWidth = SystemParameters.PrimaryScreenWidth;
408 var screenHeight = SystemParameters.PrimaryScreenHeight;
409 popup.Left = (screenWidth - popup.Width) / 2;
410 popup.Top = (screenHeight - popup.Height) / 2;
412 else if (owner !=
null && owner.IsLoaded && owner.IsVisible)
414 popup.Left = owner.Left + (owner.Width - popup.Width) / 2;
415 popup.Top = owner.Top + (owner.Height - popup.Height) / 2;