用于跨越listboxItem宽度的wpf边框控件

用于跨越listboxItem宽度的wpf边框控件,wpf,listbox,border,Wpf,Listbox,Border,我正在尝试为wpf应用程序中的业务对象定义一个dataTemplate,该应用程序的集合将绑定到一个列表框 <UserControl.Resources> <DataTemplate x:Key="ResizedItemsDataTemplate" DataType="{x:Type resizer:ResizeMonitorItem}"> <Border x:Name="bdr" BorderBrush="Blue"

我正在尝试为wpf应用程序中的业务对象定义一个dataTemplate,该应用程序的集合将绑定到一个列表框

<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定义的边框以跨越每个listbox项的整个宽度?目前,它只跨其中的文本块,不必填充listboxitem的整个宽度,并且每个listboxitem也会有所不同。

这可能与ListBoxItems本身不占用listboxitem的整个宽度有关。将
HorizontalContentAlignment=“Stretch”
属性添加到您的
列表框
,查看它是否拉伸各个项目以填充宽度。

解决了这个问题。诀窍是在listbox上设置HorizontalContentAlignment=“Stretch”,使其内容完全伸展,而不是只适合内容

 <ListBox x:Name="ListBoxResizeItems" 
                HorizontalContentAlignment="Stretch"
                ItemsSource="{Binding Path=ResizeItems}" 
                BorderThickness="0"                                         
                ItemTemplate="{DynamicResource ResizedItemsDataTemplate}" >
        </ListBox>


对不起,马特,我刚在打字的时候得到了你的答案。

与我尝试的相比,HorizontalContentAlignment是一个不错的、干净的解决方案。谢谢

下面是一些几乎有效的方法,但有时会使对话框变得越来越宽:

Width="{Binding ActualWidth, 
        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"

美好的我不知道那房子的事。太糟糕了,默认值是Left而不是Stretch,这导致了这种行为。Disco知道这个属性,但对WPF来说仍然是新的,这正是我想要的。谢谢如果有一个非常好的解决方案,为什么要发布一个几乎有效的答案?特别是在问题被回答10个月后。。。(不过,旁注:我刚才的做法与你刚才的做法完全相同:)