20

我试图在我的 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 定义的边框跨越每个列表框项的整个宽度?目前它只跨越其中的文本块,不需要填充列表框的整个宽度,并且每个列表框也不同。

4

3 回答 3

54

这可能更多地与 ListBoxItems 本身没有占用 ListBox 的整个宽度有关。将HorizontalContentAlignment="Stretch"属性添加到您的ListBox并查看它是否会拉伸各个项目以填充宽度。

于 2009-01-20T11:15:20.737 回答
2

解决了。诀窍是在列表框上设置 Horizo​​ntalContentAlignment="Stretch" 以使其内容拉伸整个宽度而不是仅适合内容。

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

抱歉,马特,当我输入这篇文章时,你的答案已经很透彻了。

于 2009-01-20T11:22:43.967 回答
2

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

以下是 ALMOST 的工作原理,但有时会使对话框的动画本身变得越来越宽:

Width="{Binding ActualWidth, 
        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"
于 2010-11-19T17:08:39.670 回答