Laden...

Controls in UserControl "schachteln"

Erstellt von Floschi vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.236 Views
Floschi Themenstarter:in
193 Beiträge seit 2007
vor 11 Jahren
Controls in UserControl "schachteln"

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.

**:::{style="color: darkblue;"}If debugging is the process of removing bugs, then programming must be the process of putting them in.){darkblue}** Dijkstra
1.552 Beiträge seit 2010
vor 11 Jahren

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

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

Floschi Themenstarter:in
193 Beiträge seit 2007
vor 11 Jahren

Ich hab im User Control einen Bereich der ein Grid enthält, und im Designer vom Studio geht halt kein Drag&Drop 😦

**:::{style="color: darkblue;"}If debugging is the process of removing bugs, then programming must be the process of putting them in.){darkblue}** Dijkstra
5.299 Beiträge seit 2008
vor 11 Jahren

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.

Floschi Themenstarter:in
193 Beiträge seit 2007
vor 11 Jahren

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.

**:::{style="color: darkblue;"}If debugging is the process of removing bugs, then programming must be the process of putting them in.){darkblue}** Dijkstra
U
1.688 Beiträge seit 2007
vor 11 Jahren

Hallo,

was ist das denn für ein "UserControl"?

Floschi Themenstarter:in
193 Beiträge seit 2007
vor 11 Jahren

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.

**:::{style="color: darkblue;"}If debugging is the process of removing bugs, then programming must be the process of putting them in.){darkblue}** Dijkstra
5.299 Beiträge seit 2008
vor 11 Jahren

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.

U
1.688 Beiträge seit 2007
vor 11 Jahren

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.

1.552 Beiträge seit 2010
vor 11 Jahren

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.

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

Floschi Themenstarter:in
193 Beiträge seit 2007
vor 11 Jahren

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"

**:::{style="color: darkblue;"}If debugging is the process of removing bugs, then programming must be the process of putting them in.){darkblue}** Dijkstra
1.552 Beiträge seit 2010
vor 11 Jahren

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.

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

Floschi Themenstarter:in
193 Beiträge seit 2007
vor 11 Jahren

Also geht es nur per XAML ?

**:::{style="color: darkblue;"}If debugging is the process of removing bugs, then programming must be the process of putting them in.){darkblue}** Dijkstra
1.552 Beiträge seit 2010
vor 11 Jahren

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.

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

5.657 Beiträge seit 2006
vor 11 Jahren

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

Floschi Themenstarter:in
193 Beiträge seit 2007
vor 11 Jahren

Hab mir jetzt ein Control von HeaderedContentControl abgeleitet.

Damit funktioniert es jetzt wie gewünscht 😁

**:::{style="color: darkblue;"}If debugging is the process of removing bugs, then programming must be the process of putting them in.){darkblue}** Dijkstra