将ListBlock置于ListBox.ItemTemplate中

时间:2011-04-16 09:35:47

标签: layout windows-phone-7 listbox

我正在开发一个Windows Phone应用程序。

我有以下XAML代码:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <ListBox x:Name="GameList" Margin="12" Grid.Row="1">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Margin="10,10,10,5" Height="67" HorizontalAlignment="Center" VerticalAlignment="Center" >
                    <TextBlock Text="{Binding Name}"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

但是我无法将文本块设置为居中(垂直和水平)。

1 个答案:

答案 0 :(得分:6)

有两种方法可以实现这一目标。

第一个解决方案是在ListBox中指定ListBox的ItemContainerStyle ,并将HorizontalContentAlignment属性设置为Center

<ListBox ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding Collection}">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

第二个解决方案是定义样式,并将样式应用于ListBox(因此它可以重复使用)。

<Style x:Key="ListBoxCenteredItemStyle" TargetType="ListBoxItem">                       
    <Setter Property="HorizontalContentAlignment" Value="Center"/>                    
</Style>

<ListBox 
    ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding Collection}"
    ItemContainerStyle="{StaticResource ListBoxCenteredItemStyle}"/>

ListBox的ItemTemplate只是用于显示每个数据项的DataTemplate。如果需要设置单行样式,ItemContainerStyle就是那个人。 :)