ich habe ein UserControl erstellt und dort habe ich einen Bereich (Grid) und in dieses Grid möchte ich gerne, im Designer vom Studio, andere Controls "Stecken/Schachteln" können.
Derzeit kann ich sie dort nicht hineinstecken.
Hat jemand eine Ahnung wie das geht, muss ich da eine Property am UserControl/Grid setzen die ich noch nicht kenne?
Danke im Vorraus.
If debugging is the process of removing bugs, then programming must be the process of putting them in.
Dijkstra
normal geht das über die Toolbox. Drag&Drop.
Oder du schreibst selbst XAML Code.
Und nein, du musst keine Property setzen. Es sei denn du meinst Grid.Column und Grid.Row um das Element falls mehrere Spalten und Reihen sind zu positionieren.
ich habe mal zum besseren Verständnis ein Bild angefügt.
Das rote soll das UserControl sein, sobald ich jedoch ein weiteres Control, in diesem Fall ein Button, im Designer dahineinziehen will, erkennt dieses neue Control(Button) nicht das UserControl als Parent sondern immer nur das dahinterliegenden.
Das ist ein normales WPF- UserControl, nur mal rot eingefärbt.
Darin liegt nur ein Grid welches auch als public Property erreichbar ist.
Per Code kann ich da auch andere Controls einhängen,
ich will das aber nicht per Code machen sondern per Designer und Drag&Drop.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Floschi am .
If debugging is the process of removing bugs, then programming must be the process of putting them in.
Dijkstra
man kann Controls nur in solche Controls einschachteln, die von Panel erben. Etwa Grid, Canvas, StackPanel, DockPanel, etc.
Es gibt annere Elemente, wo man genau 1 ChildElement hineintun kann, zB PopUps, oder auch alles, was von Decorator erbt, wie Border.
Aber UserControl ist halt für was anneres vorgesehen, nämlich zum beerben, udn dann kann man alle möglichen Controls da hineinkomponieren, und das Ergebnis bildet eine abgeschlossene, eigenständige Einheit.
Vielleicht könnte man etwas coden, dass sich das ucl wie ein Panel verhält, aber ich weiß nicht, wie das geht.
Am ehesten möglich scheint mir, von Grid, DockPanel oder StackPanel zu erben - dann wird sich dein Produkt ja auch ebenso verhalten wie ein Grid, DockPanel oder StackPanel.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ErfinderDesRades am .
ich will das aber nicht per Code machen sondern per Designer und Drag&Drop.
Dann musst Du das UserControl selbst editieren. Das ist sonst vom Designer her unveränderlich. Woher soll der Designer schließlich wissen, dass Du Controls in ein darin liegendes Grid einfügen willst?
Würdest Du nicht ein UserControl nehmen, sondern bspw. ein Grid (und von diesem ableiten), dann funktioniert's wahrscheinlich.
Dann ist es klar dass du in DeinWindow ins DeinUserControl (wessen Inhalt nicht dort definiert ist) nichts mehr reinschieben kannst. Das musst du dann schon in der XAML machen, in der du DeinUserControl definiert.
Ja aber selbst wenn ich es umbaue und von Grid ableite,
dann nimmt der Designer von VS immer die äußern Ränder der neu erstellten "Controls", um die Controls die ich per Drag&Drop hineinziehen, per margin "anzudocken"
If debugging is the process of removing bugs, then programming must be the process of putting them in.
Dijkstra
Das ist weil dein "Control" immer als Ganzes gesehen wird. Dadurch ist es VS egal, ob du 100 controls in deinem Control hast oder nicht, er wird dir immer an die Grenzen des gesamten andocken.
Du kannst auch kein Icon in einen Button schieben.
Sieh DeinControl als geschlossene Box. Der kannst du nichts mehr mit Drag&Drop hinzufügen).
Jedoch kannst du DeinControl etwas hinzufügen, wenn du diese Box öffnest. Dies machst du indem du dessen XAML öffnest und dort jene Element hinzufügst welche du möchstest.
Aber du kannst nicht in DeinWindow welche die geschlossene "Box" DeinControl beinhaltet dort etwas hineingeben. Ein UserControl ist eben, wie ErfinderDesRades bereits gesagt hat eine geschlossene Einheit, die eigentlich nur zum Benutzen und nicht Designen (wie die Controls) vorgesehen ist.
schau dir doch einfach mal an, wie es bei einem Grid funktioniert, dass man Elemente hinzufuegen kann, und diese im Grid-Layout positioniert. Dazu werden z.B. Attached Propertys verwendet, also Grid.Column und Grid.Row. Wenn du so etwas implementierst, funktioniert es auch mit deinem selbstgeschriebenen Steuerelement.
Christian
Weeks of programming can save you hours of planning