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?
Von was sprichst Du? HTML? Windows Forms? WPF? Xamarin?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.
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
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
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?
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?
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>