Laden...

Gleiche Breite von Controls in WPF

Erstellt von viereck vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.628 Views
V
viereck Themenstarter:in
8 Beiträge seit 2019
vor 5 Jahren
Gleiche Breite von Controls in WPF

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?

16.807 Beiträge seit 2008
vor 5 Jahren

Von was sprichst Du? HTML? Windows Forms? WPF? Xamarin?

V
viereck Themenstarter:in
8 Beiträge seit 2019
vor 5 Jahren

Großes SORRY! Hab's vergessen!
Ich arbeite mit WPF und C#!

16.807 Beiträge seit 2008
vor 5 Jahren

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.

V
viereck Themenstarter:in
8 Beiträge seit 2019
vor 5 Jahren

Ich möchte für alle TextBoxen in der Listbox die gleiche Breite.

V
viereck Themenstarter:in
8 Beiträge seit 2019
vor 5 Jahren

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.

Y
11 Beiträge seit 2014
vor 5 Jahren

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

5.657 Beiträge seit 2006
vor 5 Jahren

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

V
viereck Themenstarter:in
8 Beiträge seit 2019
vor 5 Jahren

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?

190 Beiträge seit 2012
vor 5 Jahren

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

V
viereck Themenstarter:in
8 Beiträge seit 2019
vor 5 Jahren

DANKE!
Das werd ich gleich mal ausprobieren.