在水平列表框中,如何将项目对齐到顶部?

时间:2009-06-24 21:34:03

标签: wpf listbox

在水平列表框中,如何将项目与顶部对齐?

我已经不知道在哪里坚持使用VerticalAlignment =“Top”。

<Window.Resources>
    <DataTemplate DataType="{x:Type l:MyType}">
        <Grid VerticalAlignment="Top">
            <TextBlock VerticalAlignment="Top" Text="{Binding MyValue}" Background="Yellow"/>
        </Grid>
    </DataTemplate>    
</Window.Resources>   

<Grid>
    <ListBox Name="listBox" ItemsSource="{Binding}"  VerticalAlignment="Top" >

        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal" VerticalAlignment="Top"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>

        <ListBox.ItemTemplate>
            <DataTemplate>
                <ListBoxItem Content="{Binding}" VerticalAlignment="Top" VerticalContentAlignment="Top"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

using System.Windows;

namespace WpfApplication5 {
    public partial class Window1 :Window {
        public Window1() {
            InitializeComponent();
            this.listBox.ItemsSource = new MyType[] {
                new MyType{ MyValue = "Tall\nItem" },
                new MyType{ MyValue = "I want this aligned to the top" } };
        }
    }

    public class MyType {
        public string MyValue { get; set; }
    }
}

1 个答案:

答案 0 :(得分:2)

您需要在列表框中设置VerticalContentAlignment,一旦设置了,就可以删除其中的所有其他对齐。

....
<ListBox Name="listBox" ItemsSource="{Binding}"  VerticalContentAlignment="Top" >
....

ListBox上的VerticalContentAlightment的默认值是'Center',所以即使你在其他地方设置VerticalAlignment,它也只是对齐ListBoxItems的顶部,它们仍然居中而不是拉伸或放在顶部。如果将VerticalContentAlignment设置为Stretch,那么您将看到其他VerticalAlignment =“Top”声明工作。