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
Gleiche Breite von Controls in WPF
viereck
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

Gleiche Breite von Controls in WPF

beantworten | zitieren | melden

Ich arbeite mit einer Listbox. Es funktioniert wie ich es erwartet habe. Ich wollte dann, zur besseren Orientierung, die Einträge mit unterschiedlichen Hintergrundfarben versehen. Das habe ich nicht geschafft. Jetzt erstelle ich Textblöcke und passe die Hintergrundfarbe an dann liste ich diese in der Listbox auf. Das funktioniert auch, aber die Textblöcke sind unterschiedlich breit. Ich will das alle Textblöcke gleich breit sind. Ich habe versucht von allen Items, der Listbox, die Breite auszulesen und anschließend allen die maximale Breite zu geben. Mein Problem hier ist dass beim Erstellen die Breite Width=NaN und ActualWidth=0 ist.

Wenn ich das mit einem Butten später ausführe funktioniert es wie ich es erwarte.

Wie kann ich die Breite der TextBlöcke nach dem Erstellen abfragen?
Wie muss ich das richtigerweise machen?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.389

beantworten | zitieren | melden

Von was sprichst Du? HTML? Windows Forms? WPF? Xamarin?
private Nachricht | Beiträge des Benutzers
viereck
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

Großes SORRY! Hab's vergessen!
Ich arbeite mit WPF und C#!
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.389

beantworten | zitieren | melden

Also ist deine eigentliche Frage nicht wie Breit die TextBox wird, sondern Deine eigentliche Frage ist, wie Du die Breite automatisch von mehreren Textboxen identisch ausrichten kannst, richtig?

Es ist immer besser die eigentliche Anforderung zu beschreiben.

In WPF bzw. dahingehend XAML arbeitet man eigentlich mit Panel (zB DockPanel) und Grids, sodass sich die Controls automatisch ausrichten, zB via HorizontalAlignment.
Es gibt keine Notwendigkeit dies manuell via Code zu machen.
private Nachricht | Beiträge des Benutzers
viereck
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

Ich möchte für alle TextBoxen in der Listbox die gleiche Breite.
private Nachricht | Beiträge des Benutzers
viereck
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

Ich habe es eben ausprobiert. Wenn ich die TextBoxen zu einem Grid hinzufüge und dieses Grid dann in die Listbox gebe ist das Verhalten gleich wie vorher.
Alle Einträge haben eine unterschiedliche Breite.

Ich möchte dass meine TextBoxen aber alle gleich breit sind.
private Nachricht | Beiträge des Benutzers
Yankyy02
myCSharp.de - Member



Dabei seit:
Beiträge: 10

beantworten | zitieren | melden

Hallo viereck,

du könntest den ItemContainerStyle der ListBox folgendermaßen setzen ....

           <ListBox.ItemContainerStyle>
                <Style>
                    <Setter Property="TextBox.Width" Value="30"/>
                    <Setter Property="TextBox.HorizontalAlignment" Value="Left"/>
                </Style>
            </ListBox.ItemContainerStyle>

somit sollten alle Textboxen die gleiche Breite haben ...

LG
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

Zitat von viereck
Wenn ich die TextBoxen zu einem Grid hinzufüge und dieses Grid dann in die Listbox gebe

Zeig mal dein XAML, ich kann mir nicht vorstellen, was du machst. Abgesehen davon sollte es aber Beispiele im Internet geben, wie man Elemente in einem Grid ausrichtet bzw. ein solches Grid als Container eines ItemsControl verwendet.
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
viereck
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

Hallo, DANKE für die Unterstützung.

Noch mal was ich mir vorstelle. Ich verwende eine ListBox in der ich einige Sachen, zum Auswählen, anzeigen lassen. Um diese leichter zu unterscheiden will ich einen individuellen Hintergrund bei den Einträgen. Da ich es nicht geschafft habe bei normalen ListBox.Items den Hintergrund individuell einzustellen habe ich versucht TextBlöcke, mit versiedenen Hintergründen, in die ListBox einzufügen.

Das funktioniert auch recht gut.
ABER...
Die TextBlöcke sind nur so breit wie der Inhalt.
Wenn ich den Button betätige werden die Einträge auf die maximale Breite eingestellt.

Ich habe ein Bild als Dateianhang angefügt in dem man links den Zustand mit dem unterschiedlich breiten Einträgen sieht und rechts was ich gerne haben würde.

Was muss ich tun damit ich das beim Füllen der ListBox erreiche?
Zum Zeitpunkt des Füllens haben alle ListBox.Items und TextBlöcke eine ActualWidth=0 und Width=NaN.
Oder gibt es eine Möglichkeit ListBox.Items einen individuellen Hintergrund zu geben?
Attachments
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.642

beantworten | zitieren | melden

Hallo,

das Stichwort lautet: Grid.IsSharedSizeScope (bzw. Stichworte für die Internetsuche "WPF ListBox items same width")

s. z.B. Synchronizing the width of elements in an ItemsControl oder How can I make a column in a listbox in WPF the same width for all items?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
Wilfried
myCSharp.de - Member

Avatar #2TnJ7IKlYXgOor5sZSIA.jpg


Dabei seit:
Beiträge: 179
Herkunft: Radeberg

beantworten | zitieren | melden

Hallo,
so wie es aussieht, suchst du sowas:

        <ListView ItemsSource="{Binding MeineListe}" HorizontalContentAlignment="Stretch" >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding}" Background="Red"/>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

- Wer lesen kann, ist klar im Vorteil
- Meistens sitzt der Fehler vorm Monitor
- "Geht nicht" ist keine Fehlermeldung!
- "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF
private Nachricht | Beiträge des Benutzers
viereck
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

DANKE!
Das werd ich gleich mal ausprobieren.
private Nachricht | Beiträge des Benutzers