Hallo zusammen,
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.
Hallo Floschi,
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.
Gruß,
Michael
Ich hab im User Control einen Bereich der ein Grid enthält, und im Designer vom Studio geht halt kein Drag&Drop 😦
ungefähr jedes stück Xaml, was du im INet findest, hat ein Grid mit Kram drauf. gugge zB 4ViewsWpf
Der frühe Apfel fängt den Wurm.
Hallo,
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.
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.
Der frühe Apfel fängt den Wurm.
ich will das aber nicht per Code machen sondern :::
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.
Hast du es so in etwa:
<Window x:Klass="DeinWindow">
<DeinUserControl/>
</Window>
<UserControl x:Klass="DeinUserControl">
<!--CONTENT-->
</UserControl >
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"
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.
Also geht es nur per XAML ?
Ich denke wir reden einander vorbei.
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.
Hi Floschi,
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
Hab mir jetzt ein Control von HeaderedContentControl abgeleitet.
Damit funktioniert es jetzt wie gewünscht 😁