Ответ 1
Скорее всего, это связано с тем, что сами ListBoxItems не занимают всю ширину ListBox. Добавьте атрибут HorizontalContentAlignment="Stretch"
к вашему ListBox
и посмотрите, растягивает ли отдельные элементы, чтобы заполнить ширину.
Я пытаюсь определить dataTemplate для бизнес-объекта в моем приложении wpf, коллекция которого привязана к ListBox.
<UserControl.Resources>
<DataTemplate x:Key="ResizedItemsDataTemplate" DataType="{x:Type resizer:ResizeMonitorItem}">
<Border x:Name="bdr" BorderBrush="Blue"
BorderThickness="1"
CornerRadius="2"
Width="auto"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<Grid Margin="2">
<Grid.RowDefinitions>
<RowDefinition Height="14"></RowDefinition>
<RowDefinition Height="14"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{Binding SaveAsFileName}"></TextBlock>
<TextBlock Grid.Row="1" Text="{Binding ResizedImageFilePath}"></TextBlock>
</Grid>
</Border>
</DataTemplate>
</UserControl.Resources>
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0">
<Border BorderThickness="0,0,0,5" BorderBrush="DarkGray" >
<ListBox x:Name="ListBoxResizeItems" ItemsSource="{Binding Path=ResizeItems}" BorderThickness="0" ItemTemplate="{DynamicResource ResizedItemsDataTemplate}">
</ListBox>
</Border>
</Grid>
Как я могу получить границу, определенную с помощью x: Name = bdr, чтобы охватить всю ширину каждого элемента списка? В настоящий момент он охватывает только текстовые блоки внутри него, которые не обязательно заполняют всю ширину списка и не изменяются для каждого списка.
Скорее всего, это связано с тем, что сами ListBoxItems не занимают всю ширину ListBox. Добавьте атрибут HorizontalContentAlignment="Stretch"
к вашему ListBox
и посмотрите, растягивает ли отдельные элементы, чтобы заполнить ширину.
Разработал это. Трюк состоит в том, чтобы установить HorizontalContentAlignment = "Stretch" в вашем списке, чтобы его содержимое растягивало всю ширину, а не только содержимое.
<ListBox x:Name="ListBoxResizeItems"
HorizontalContentAlignment="Stretch"
ItemsSource="{Binding Path=ResizeItems}"
BorderThickness="0"
ItemTemplate="{DynamicResource ResizedItemsDataTemplate}" >
</ListBox>
Извините, Мэтт, только что получил ваш ответ, когда я печатал этот пост.
HorizontalContentAlignment - хорошее, чистое решение по сравнению с тем, что я пытался. Спасибо!
Здесь то, что ALMOST работало, но иногда создавало диалоговое окно, которое анимировало себя шире и шире навсегда:
Width="{Binding ActualWidth,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"