WPF: Child windows , oder MDI?
-
achso eine idee haette ich noch
was haellst du davon den content in einer page zu definieren
und dann in der mainwindow des in dem usercontrol packen ?<controls:SubWindow> <controls:SubWindow2.ChildContent> <controls:SubWindow2Page /> </controls:SubWindow2.ChildContent> </controls:SubWindow>
// hmm - scheint nicht zu funktionieren /=
-
hmm ist ne blöde sache.. hab mir grad überlegt, ob es nich gehen würde, wenn ich einfach normale WPF Windows als Child in einem Haupt WPF Window benutze.. oder gehts das nich gut? ich müsste es halt so machen, das die Child Windows nur in einem Bereich "Childarea" des Haupfenster sichtbar sind und ich sie nicht aus dem hauptfenster ziehen kann.
Oder ist das ne schlechte Idee? ich denke schon
-
habs hinbekommen
aaaaaaaaaaalso
du hast dein UserControl welches nur den rahmen und das "ChildContent" property bereit stellt
nun definierst du ein subwindow indem du
eine Page erstellst mit deinen inhaltin in dem fenster wo es angezeigt werden soll dann nur noch:
<controls:SubWindow2> <controls:SubWindow2.ChildContent> <Frame Source="Controls/SubWindow2Content.xaml" /> <!-- in dieser page hast du dein content des sub windows definiert --> </controls:SubWindow2.ChildContent> </controls:SubWindow2>
deine idee geht nicht - ein "Window" muss in nem root sein, dh du kannst es nicht einbinden - darum ja der umweg {o;
-
ja danke werde deine Idee, mal testen . du hast es halt drauf;) Zu der Window geschichte.. ja ich binde die Fenster (Subwindo) nich in die Parentfenster ein, sonder ich übergeb den Subwindow den clientBereich. Wenn ich nun dne Subwindow verschiebe vergrößere etc. pürfe ich ob die größe nicht über das hauptfenster hinaus geht. Naja, alles andere als elegant;)
deine idee ist super, allerding wird es ein krampf die Verschiebe/Vergrößere/Minimiere logik zu programmieren,
-
aber das brauchst du ja nur einmal in den SubWindowBorder element #gg (Die Page musste sich automatisch anpassen)
der nachteil ist da nu nur, das du den content nicht live beim entwickeln in der mainwindow siehst, da wird nur "Frame" angezeigtwaere dieses topic nix fuer die FAQ wenn ichs n bissl zusammenfasse? also "MDI in WPF" #gg
-
ok ich checks mal ab. Spiel grad bischen mit WPF Window rum, wie bekomm ich da Origin Postion des Fenster?
bzw. wie finde ich die Pixel postion eine canvas in einem fenster aufm aufm bildschirm heraus?
-
ich vermute man muss das GetWindowRect von Win32 kapseln
-
oh man, das ganze ist aber auch ne eierlegende wollmilch sau
-
wie meinst du das ?
falls es dir hilft - ich hatte mal SHGetFileInfo gekapselt - mit GetWindowRect muesste es simultan laufennamespace Helper { [StructLayout(LayoutKind.Sequential)] public struct SHFILEINFO { public IntPtr hIcon; public IntPtr iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; }; class Win32 { public const uint SHGFI_ICON = 0x100; public const uint SHGFI_LARGEICON = 0x0; // 'Large icon public const uint SHGFI_SMALLICON = 0x1; // 'Small icon [DllImport("shell32.dll")] public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags); } } IntPtr hImgSmall = Helper.Win32.SHGetFileInfo(fullName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON|Win32.SHGFI_SMALLICON);
-
ich meine das mhier weider direkt wieder mal WinAPI funktionen einbinden muss.
Hey wie findest du den der artikel:
-
er hat im prinzip genau das selbe gemacht
Since I could not add a window to a control in WPF (at least not the way I wanted to), I created a custom control which was styled to look like a window
er hat nur statt ein UserControl ein Custom Control genommen - nur so wie es auschaut muss er den rahmen usw auch in jedem custom control neu zeichnen - durch die page brauchst du das nicht
und die ganzen propertys wie transparent - draggable usw ist entweder ind er usercontrol bereits vorhanden oder man kann es leicht implementieren// er halt also ein eigenes control gemacht was ein "Window" simuliert und "SubWindows" als children annimmt - da find ich unsere loesung schoener #gg
-
bei seiner lösung muss ich aber die verschieben/größer/minimieren gedöns nicht mehr implementieren
-
schaus dir doch ab q: #gg
wenn cih mit den code so anschau - er hat den gesammten client bereich mit einem MwiWindow ueberdeckt - und dieser beinhaltet als Children dann die fenster "MwiChild"
wenn ich so mit dem code rumspiel - so richtig gefaellts mir nicht q: #gg
zudem mag ich diese buttons fuer minimieren und schliessen nicht - diese variieren doch je nach system
ich dacht das man sich diese auch vom system holt und dann anzeigt
-
ja hab mir den code angescahut, aber so richtig involviert bin ich in c# wpf noch net, hab zwar einiges gemacht.. aber das ist schon ein gutes stück stoff. Das Problem ist halt, das ich nun neue UserControl abgeleitet von MwiChild erstellen will.. aber das ist wohl net so einfach möglich
-
so wie ich das sehe basiert sein code darauf das du das content der ChildWindow fenster im hauptfenster definierst - so wie unsere erste loesung das schon konnte
daher ist es bestimmt einfach das du dir das drag&drop&resize abschaust wie das implementiert wurde
-
oh man das wird ein aufwand, das so hinzubiegen. Aber das prinzip mit dem MwiWindows control welche die Usercontrol beinhaltet ist ja gar nich so schelcht oder? dann könnte ich deine version als Child Windows benutzen.
-
wozu?
die usercontrols aus unserer version kann doch direkt in dem Window landen wie jedes andere control auch
- wozu noch ein control dazwischen, seh da kein nutzen
-
das hier find ich gut
=> drag in canvas : http://www.codeproject.com/KB/WPF/DraggingElementsInCanvas.aspx
-
Guten Morgen evil...alles klar;) Ich bin hin und her gerissen, ich habe mir mal das DEComponents Trial http://www.devcomponents.com/ runtergeladen. Funktioniert ganz gut, allerdings wenn ich eine exe auf ner anderen maschine startte welche devcomponents control verwendet stürtzt das programm beim starten ab. Auf der anderen maschine hab die gleichen framesworks und auch das DevCompoents gedöns installiert.
Aber ich denke du kannst mir da auch net weiter helfen oder?
-
ne sorry - aber kanns sein das die app dann eine zusaetzliche dll braucht welche mit kopiert werden muss ?