Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Anchor bei elementen im Panel z. B TabControl.
Exis
myCSharp.de - Member



Dabei seit:
Beiträge: 51

Themenstarter:

Anchor bei elementen im Panel z. B TabControl.

beantworten | zitieren | melden

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ß.
private Nachricht | Beiträge des Benutzers
steffen_dec
myCSharp.de - Member



Dabei seit:
Beiträge: 322

beantworten | zitieren | melden

Hallo Exis,

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

Gruß
private Nachricht | Beiträge des Benutzers
Exis
myCSharp.de - Member



Dabei seit:
Beiträge: 51

Themenstarter:

beantworten | zitieren | melden

So endlich die Zeit gefunden :D

<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ß.
private Nachricht | Beiträge des Benutzers
Lando
myCSharp.de - Member

Avatar #avatar-3452.jpg


Dabei seit:
Beiträge: 74

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Exis
myCSharp.de - Member



Dabei seit:
Beiträge: 51

Themenstarter:

beantworten | zitieren | melden

Ich möchte nichts sagen aber ich bin nicht komplett doof :o
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ß.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.655
Herkunft: Leipzig

beantworten | zitieren | melden

Hi Exis,
Zitat von Exis
Ich möchte nichts sagen aber ich bin nicht komplett doof :o

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

Zitat von Exis
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?

Zitat von Exis
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
private Nachricht | Beiträge des Benutzers
Exis
myCSharp.de - Member



Dabei seit:
Beiträge: 51

Themenstarter:

beantworten | zitieren | melden

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ß.
private Nachricht | Beiträge des Benutzers
xxxprod
myCSharp.de - Experte

Avatar #avatar-2329.gif


Dabei seit:
Beiträge: 1.378
Herkunft: Österreich\Wien

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Exis
myCSharp.de - Member



Dabei seit:
Beiträge: 51

Themenstarter:

beantworten | zitieren | melden

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ß.
private Nachricht | Beiträge des Benutzers
Lando
myCSharp.de - Member

Avatar #avatar-3452.jpg


Dabei seit:
Beiträge: 74

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
t0ms3n
myCSharp.de - Member



Dabei seit:
Beiträge: 314

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von t0ms3n am .
private Nachricht | Beiträge des Benutzers
Exis
myCSharp.de - Member



Dabei seit:
Beiträge: 51

Themenstarter:

beantworten | zitieren | melden

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ß.
private Nachricht | Beiträge des Benutzers