我试图在我的wpf应用程序中为业务对象定义一个dataTemplate,其集合被绑定到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定义边框以跨越每个列表框项的整个宽度?目前它只跨越其中的文本块,不需要填充listboxitem的整个宽度,并且每个listboxitem也会有所不同。
答案 0 :(得分:52)
这可能更多地与ListBoxItems本身没有占用ListBox的整个宽度有关。将HorizontalContentAlignment="Stretch"
属性添加到ListBox
,看看它是否会拉伸各个项目以填充宽度。
答案 1 :(得分:1)
解决了这个问题。诀窍是在列表框上设置HorizontalContentAlignment =“Stretch”,使其内容拉伸整个宽度,而不是仅适合内容。
<ListBox x:Name="ListBoxResizeItems"
HorizontalContentAlignment="Stretch"
ItemsSource="{Binding Path=ResizeItems}"
BorderThickness="0"
ItemTemplate="{DynamicResource ResizedItemsDataTemplate}" >
</ListBox>
对不起马特,我在输入这篇文章时得到了你的答案。
答案 2 :(得分:1)
与我尝试的相比,HorizontalContentAlignment是一个不错的,干净的解决方案。谢谢!
这就是ALMOST的工作原理,但有时会使对话框的动画本身越来越宽广:
Width="{Binding ActualWidth,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"