Я работаю с WPF ListBox, а внутри ItemTemplate у меня есть StackPanel. Я пытаюсь привязать ширину StackPanel к ViewportWidth ListBox, но не могу найти способ сделать это. Если я привяжу ActualWidth, он закроется, но поскольку вертикальная полоса прокрутки включена в ActualWidth, я все равно получаю скрытые за ней вещи и горизонтальную полосу прокрутки.
См. XAML ниже:
<ListBox x:Name = "MessagesGrid" Grid.Column = "2" HorizontalContentAlignment = "Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Width = "{Binding Path=ActualWidth, ElementName=MessagesGrid}" HorizontalAlignment = "Stretch">
<StackPanel Name = "ToMe" HorizontalAlignment = "Stretch" Visibility = "{Binding IsFromMe, Converter = {StaticResource BooleanToHiddenConverter}}">
<TextBlock Text = "{Binding Date}" FontSize = "8" TextWrapping = "Wrap" Padding = "0,0,60,0"/>
<TextBlock Text = "{Binding Text}" FontSize = "12" TextWrapping = "Wrap" Padding = "0,0,60,0"/>
</StackPanel>
<StackPanel Name = "FromMe" HorizontalAlignment = "Stretch" Visibility = "{Binding IsFromMe, Converter = {StaticResource BooleanToVisibleConverter}}">
<TextBlock Text = "{Binding Date}" HorizontalAlignment = "Right" FontSize = "8" TextWrapping = "Wrap" Padding = "60,0,0,0"/>
<TextBlock Text = "{Binding Text}" HorizontalAlignment = "Right" FontSize = "12" TextWrapping = "Wrap" Padding = "60,0,0,0"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Вам не нужна эта привязка. Просто установите HorizontalContentAlignment = "Stretch" в ListBox.
Установка HorizontalContentAlignment = "Stretch" в ListBox, похоже, не сработала. Я также пробовал использовать его для объекта Grid в ItemTemplate, но ничего не изменилось. Я обновил свой XAML, добавив больше того, что у меня есть.
Но вы удалили привязку ширины?
Да, конечно.
У меня отлично работает, даже без всех остальных HorizontalAlignments.





Добавление Padding в StackPanel вам не подходит?