Laden...

Anchor bei elementen im Panel z. B TabControl.

Erstellt von Exis vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.657 Views
E
Exis Themenstarter:in
51 Beiträge seit 2014
vor 9 Jahren
Anchor bei elementen im Panel z. B TabControl.

Hallo,

ich schlage mich derzeit total mit WPF rum.. aber irgendwie verliere ich da..
Ich versuche derzeit ein TabControl, welches sich in einem DockPanel befindet, so zu setzen das wenn man das Fenster vergrößert, das Control mit größer wird.
Habe es schon mit Alignment versucht, mit dock. Aber irgendwie kriege ich immer nur 2 Seiten fixiert, die anderen beiden Seiten nicht...

Gruß.

S
322 Beiträge seit 2007
vor 9 Jahren

Hallo Exis,

wenn Du Deinen Versuch (Quellcode) hier postest, könnte Dir auch geholfen werden. 😉

Gruß

E
Exis Themenstarter:in
51 Beiträge seit 2014
vor 9 Jahren

So endlich die Zeit gefunden 😄


<DockPanel LastChildFill="False" Margin="0,24,155,54">
            <TabControl Width="436" Margin="0,0,0,199">
                <TabItem Header="TabItem">
                    <Grid Background="#FFE5E5E5"/>
                </TabItem>
                <TabItem Header="TabItem">
                    <Grid Background="#FFE5E5E5"/>
                </TabItem>
            </TabControl>
        </DockPanel>

gerade sieht es so aus.
Ziehe ich das Fenster Senkrecht größer/kleiner, so wird das TabControl auch größer/kleiner. Ziehe ich das Fenster aber Waagerecht größer oder kleiner, so passiert nichts und das TabControll wird, wenn ich es kleiner ziehe an der Seite einfach abgeschnitten.

Gruß.

74 Beiträge seit 2014
vor 9 Jahren

Wenn du willst dass ein Control seinen Container komplett ausfüllt, darfst du keine absoluten Breiten- oder Höhenangaben machen, was du aber mit dem Setzen des Width-Attributs gemacht hast.

Ab und an ein Blick in die Doku kann auch nicht schaden.

Grüße

E
Exis Themenstarter:in
51 Beiträge seit 2014
vor 9 Jahren

Ich möchte nichts sagen aber ich bin nicht komplett doof 😮

  1. Der Control soll den Container nicht komplett ausfüllen, da kommt später ja noch was rein.
  2. Auch wenn ich das Width Attribut nicht setze, habe ich das Problem immer noch.

Es geht einfach darum das die Anchor Hacken, entweder nur Vertikal oder Horizontal da sind, aber nicht für beides.

Gruß.

5.658 Beiträge seit 2006
vor 9 Jahren

Hi Exis,

Ich möchte nichts sagen aber ich bin nicht komplett doof 😮

Das hat dir aber niemand vorgeworfen. Oder habe ich etwas überlesen?

  1. Der Control soll den Container nicht komplett ausfüllen, da kommt später ja noch was rein.

Das hast du nirgendwo erwähnt, woher soll das jemand wissen?

Es geht einfach darum das die Anchor Hacken, entweder nur Vertikal oder Horizontal da sind, aber nicht für beides.

Der Hinweis auf die Doku war völlig berechtigt. Es gibt noch andere Layout-Elemente als das DockPanel.

Bitte beachte [Hinweis] Wie poste ich richtig? und beschäftige dich mit den Grundlagen, um unnötige Nachfragen zu vermeiden.

Christian

Weeks of programming can save you hours of planning

E
Exis Themenstarter:in
51 Beiträge seit 2014
vor 9 Jahren

War nicht böse gemeint mit dem "doof". 8o

JA hab die Doku doch auch gelesen, nur werde aus dieser nicht schlau.
Und da dies ein Forum ist, frage ich hier nach Hilfe.

Ich beschäftige mich doch auch mit den Grundlagen, nur darf ich da keine Fragen haben?
Ich habe es mit Alignment usw versucht. Aber ich kriege es einfach nicht hin, dass das einzelne Element an allen 4 Seiten geankert wird. Habe auch unterschiedliche Panels getestet.

Ich habe auch nicht erwähnt, dass das Element den kompletten Container füllen soll, wieso sollte ich das wollen? Was bringt es mir im Panel ein einziges Element zu führen. Da kann man sich dann doch auch das Panel sparen.

Gruß.

1.378 Beiträge seit 2006
vor 9 Jahren

Hallo Exis,

es gilt nach wie vor: Wenn du nicht ordentlich erklärst was du überhaupt erreichen willst, kann dir hier auch niemand helfen.

Du postest einen Codeauschnitt mit einem DockingPanel und einem TabControl als Child und erwähnst nicht das du noch andere Controls darin platzieren willst. Welche, Wieviel und Wohin sollen die denn kommen? Das können wir nicht erraten.

Der Einwand von Lando ist gerechtfertigt: Solange du Width gesetzt hast, wird dein TabControl sich nicht in der Breite automatisch anpassen können.

Den Begriff "Anchor" gibt es im WPF meines Wissens nach nicht mehr. Was stattdessen eben verwendet wird sind automatische (also nicht gesetzte) Breiten & Höhen inkl. passenden Margins und/oder Paddings.

Lg, XXX

E
Exis Themenstarter:in
51 Beiträge seit 2014
vor 9 Jahren

Hey,

dann sollte man eventuell mal sagen, was man an meiner Frage nicht versteht?
Also. Ich habe ein Dockpanel in welches derzeit ein TabControl drin ist, da kommt später noch was anderes rein. Sonst würde ein Panel ja kein Sinn machen wenn nur ein Element darein kommt.

Zum Thema nun: Wird das Windows Fenster vergrößert, so wird das DockPanel ja mit vergrößert weil es an allen wir seiten "Geankert" ist. Das TabControl selber, vergrößert sich aber nur in eine Richtung. Entweder oben, links, rechts, unten. Aber nicht in zwei Richtungen, wie es eigentlich sein sollte. Wenn es immer noch nicht verstanden wird, dann zeichne ich das auf.

Wenn man in Windows Forms ein Panel gemacht hat und darin Elemente platziert hat, konnte man diese Ankern, sodass beim vergrößern der Form/Panels, die Elemente darin mit vergößert werden.

Das mit Width und Height habe ich schon versucht. An sich ist es möglich eine Resize Methode zu verwenden, wo ich Width und Heigh immer anpasse, aber das ich ja nicht sinn der sache...

Gruß.

74 Beiträge seit 2014
vor 9 Jahren

Das Layouting funktioniert in WPF (zum Glück) nicht mehr so wie bei WinForms. Ich finde es hat eher (entfernt) etwas vom Layouting in HTML. Während Panels in WinForms eher optional (und ein Folterwerkzeug) waren, sind sie in WPF für flexible Layouts eigentlich unumgänglich. Und da kann es durchaus mal vorkommen, dass ein Element einen Container für sich allein hat.

Je nachdem was man erreichen will, benutzt man eben andere Panels, und ich glaube du hast einfach nicht verstanden was ein DockPanel eigentlich macht (ist nicht böse gemeint, Anchor-Property in WinForms != DockPanel in WPF). Möglicherweise wäre ein Grid (mit entsprechenden Row- und ColumnDefinitions) eher das richtige. Dann noch die Width- und Height-Angaben des eigentlichen Elements weglassen und schon sollte es passen. Das Ankern von dem du sprichst, passiert je nach Container eigentlich implizit, ansonsten (eingeschränkt) über die Vertical- und HorizontalAlignment-Properties des eigentlichen Elements.

Schau dir mal das Tool Kaxaml an. Für schnelle, reine Xaml-Sachen ist es sehr gut, weil du kein ganzes WPF-Projekt haben musst, und du siehst das Ergebnis sofort. Ansonsten hilft nur Ausprobieren, daraus Lernen, in der Doku oder im Internet nachschlagen, vergessen wie du deine WinForms gestaltet hast 😉

Grüße

T
314 Beiträge seit 2013
vor 9 Jahren

Und was ist nun dein Problem?

Dein geposteter Code funktioniert doch, sobald Du die genannten Hinweise nutzt und entsprechend alle festen Höhen/Breiten entfernst.


 <DockPanel LastChildFill="True" >
        <TabControl>
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
        </TabControl>
    </DockPanel>

Einfach noch LastChildFill auf True setzen und fertig. Falls du hier nicht mit LastChildFill arbeiten möchtest, dann ist das DockPanel einfach nicht der richtige Container.

E
Exis Themenstarter:in
51 Beiträge seit 2014
vor 9 Jahren

Hallo 😃

Danke Lando, super Text. Ich fand Panels immer sehr hilfreich hehe. Also ich hoffe das ich ein DockPanel richtig verstanden habe, es Dockt halt an der vorgegeben Kante (Top, L, R, Bottom) an, dabei spielt es für das Element keine Rolle welche Kante es ist. Und beim StackPanel ist es doch so, dass das die einzelnen Elemente entweder nur Veritkal oder Horizontal gedockt werden können. Oder? Die Idee mit dem Grid hört sich gut an.
Das Tool scheint auf den ersten Blick nett zu sein, werde es mir Morgen oder am Donnerstag anschauen, wenn ich wieder zuhause bin.

@t0ms3n bei mir hat er nicht funktioniert. Aber ich hatte auch LastChildFill auf False.
Werde dies auch in den kommenden Tagen testen.

Danke 😃
Gruß.