j'ai une fenêtre que je construis dans le code, et de montrer:nouvelle fenêtre ouvre sous
Window wndViewer = new Window();
wndViewer.Background = new SolidColorBrush(System.Windows.Media.Color.FromArgb(0xFF, 0x31, 0x31, 0x31));
wndViewer.WindowState = WindowState.Maximized;
wndViewer.Width = 1024;
wndViewer.Height = 768;
Grid grd = new Grid();
wndViewer.Title = "<Removed>";
Viewer vw = new Viewer(); // This is a UserControl
vw.StudyDate = ((StudyItem)sender).StudyDate.ToString("MM/dd/yyyy");
vw.PatientName = ((StudyItem)sender).PatientName;
vw.PatientId = ((StudyItem)sender).OwnerName;
vw.Margin = new Thickness(3, 30, 3, 3);
vw.StudyInstance = ((StudyItem)sender).ItemStudy;
grd.Children.Add(vw);
wndViewer.Content = grd;
refreshTimer.Stop();
wndViewer.Tag = vw.StudyInstance;
wndList.Add(wndViewer); // List<Window> of all the windows opened this way.
DependencyObject dpParent = LogicalTreeHelper.GetParent(this);
while (dpParent != null && dpParent.GetType() != typeof(Window))
{
dpParent = LogicalTreeHelper.GetParent(dpParent);
}
wndViewer.Owner = (Window)dpParent;
wndViewer.ShowActivated = true;
wndViewer.Show();
Le problème est que je dois cette fenêtre pour afficher au-dessus de la fenêtre en cours, et arrive toujours sous la fenêtre actuelle. J'ai essayé plusieurs solutions:
wndViewer.BringIntoView();
Importation et appel:
[DllImport("User32.dll")]
public static extern Int32 SetForegroundWindow(int hWnd);
[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName, string lpWindowName);
Donc, je suis sûr que je suis ici avec vue sur quelque chose. Merci pour toute aide!
~ md5sum ~
Cela semble avoir fait l'affaire ... Cependant, c'est un peu "hackish", puisque maintenant les fenêtres dynamiques doivent être déplacées de la fenêtre principale pour revenir à la fenêtre principale. Cela va certainement fonctionner pour le moment! –
"this" dans ce cas n'est pas une fenêtre, mais plutôt un UserControl, donc j'obtiens la fenêtre parent logique et l'utilise, puisque la propriété owner accepte UNIQUEMENT une fenêtre. De plus, la classe Window n'a pas de méthode Initialise accessible au public, elle doit donc être spécifique à AboutBox. –
Et (hackish ou pas) réinitialiser le drapeau dans le gestionnaire d'événements vw.Loaded a l'effet exact dont j'ai besoin ici. La fenêtre se place devant, mais ne force pas à l'avant tout le temps. –