带有图像,文本块和矩形的网格,在列表框内没有完全正确显示

时间:2009-10-16 15:18:25

标签: c# .net wpf user-interface

所以我在ListBox项目模板中有这个Xaml:

<ListBox.ItemTemplate>
    <DataTemplate>
        <Grid Height="22" Width="Auto">
            <Image Margin="-2,0,0,0" Source="{Binding Path=ADsPath, Converter={StaticResource ImxConverter}}" HorizontalAlignment="Left" Width="22"  />
            <TextBlock Margin="20,3,0,0" Text="{Binding Path=DisplayValue}" Width="Auto" />
            <Rectangle Fill="White" Stroke="White" Margin="-2,0,-2,0.5" VerticalAlignment="Bottom" Height="1" Width="Auto" />
        </Grid>
    </DataTemplate>
</ListBox.ItemTemplate>

这个想法是矩形,在整个ListBox项的底部提供了一条细白线;但是,使用上面的Xaml,它只会延伸到文本,而不是ListBox的整个宽度。

2 个答案:

答案 0 :(得分:1)

将宽度设置为“自动”基本上告诉它只要足够大以适应内部的所有内容。我认为您需要将Grid的Horizo​​ntalAlignment设置为Stretch才能使其正常工作。

编辑:

我做了一个小样本应用。以下是我将如何做你想做的事情:

在实际的列表框中,我将Horizo​​ntalContentAlignment属性设置为Stretch

我会将你的网格改为DockPanel:

<ListBox.ItemTemplate>
    <DataTemplate>
        <DockPanel Height="22" HorizontalAlignment="Stretch">
            <Rectangle Fill="White" Stroke="White" Margin="-2,0,-2,0.5" DockPanel.Dock="Bottom" Height="1"/>
            <Image Margin="-2,0,0,0" Height="20" DockPanel.Dock="Left" Width="22"  />
            <TextBlock Margin="20,3,0,0" Text="Daniel Manning" DockPanel.Dock="Left"/>
        </DockPanel>
    </DataTemplate>
</ListBox.ItemTemplate>

答案 1 :(得分:1)

您是否尝试过删除宽度=“自动”? Auto说“只让我成为我需要的大”,在你的情况下,由文本的长度决定。默认为“Stretch”,意思是“嘿容器,帮我一个忙,让我像你一样宽。”