Hallo VBP-Forum,
ich bin dabei einen Chat zu entwickeln (siehe auch hier).
Ich möchte, dass die Nachrichten eine Breite bekommen, welche 9/10 der ListBox beträgt.
Dazu habe ich das Binding mit einem Converter verwendet.
Allerdings bleiben die Nachrichten so klein, dass der Text so reinpasst - sie passen sich also dem Inhalt an.
Das möchte ich aber nicht, weshalb ich folgenden XAML-Code für das Binding verwendet habe:
Dabei ist das Element 'messages' die ListBox und der Converter enthält folgenden Code:
Es funktioniert auch anstandslos, allerdings nur, wenn die ListBox eine feste Größe hat.
Wenn die ListBox aber eine dynamische Größe besitzt, also Width=Auto, wird mir in der Ausgabe folgender Fehler angezeigt:
Jetzt meine Frage: Ist es irgendwie möglich, trotzdem erfolgreich an die ListBox zu binden ?
ich bin dabei einen Chat zu entwickeln (siehe auch hier).
Ich möchte, dass die Nachrichten eine Breite bekommen, welche 9/10 der ListBox beträgt.
Dazu habe ich das Binding mit einem Converter verwendet.
Allerdings bleiben die Nachrichten so klein, dass der Text so reinpasst - sie passen sich also dem Inhalt an.
Das möchte ich aber nicht, weshalb ich folgenden XAML-Code für das Binding verwendet habe:
Dabei ist das Element 'messages' die ListBox und der Converter enthält folgenden Code:
VB.NET-Quellcode
- Public Class ChatMaxWidthConverter
- Implements System.Windows.Data.IValueConverter
- Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
- Dim dbl As Double = CDbl(value)
- dbl = dbl / 10 * 9
- Return dbl
- End Function
- Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
- Throw New NotImplementedException()
- End Function
- End Class
Es funktioniert auch anstandslos, allerdings nur, wenn die ListBox eine feste Größe hat.
Wenn die ListBox aber eine dynamische Größe besitzt, also Width=Auto, wird mir in der Ausgabe folgender Fehler angezeigt:
System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='NaN' BindingExpression:Path=Width; DataItem='ListBox' (Name='messages'); target element is 'Grid' (Name=''); target property is 'Width' (type 'Double')
Jetzt meine Frage: Ist es irgendwie möglich, trotzdem erfolgreich an die ListBox zu binden ?