ListBox自定义ItemTemlate,WP8,C#,WPF中StackPanel的动态高度

时间:2014-12-05 09:08:51

标签: c# wpf xaml windows-phone-8 listbox

我正在编写将显示来自RSS Feed的数据的应用程序。我只需要很少的视图来显示小图像和描述。 我有自定义ListBox与一个stackPanel其中是和。 问题是:该列表框中的每个项目都有一些高度,但我需要根据文本长度和图像大小动态更改高度。

我的ListBox:

<ListBox x:Name="gui_listNovinky" SelectedIndex="-1" Height="500" VerticalAlignment="Top" ScrollViewer.VerticalScrollBarVisibility="Hidden" HorizontalContentAlignment="Stretch" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Border BorderThickness="0,1,0,0" BorderBrush="Black" Margin="10">
                <StackPanel Name="stackpanel" Orientation="Horizontal" Height="500">
                    <StackPanel Width="435" Height="1000">
                        <Image Source="{Binding Image}" Height="200" Width="230" VerticalAlignment="Top"/>

                        <TextBlock Text="{Binding Description}" MaxHeight="290" FontSize="20" VerticalAlignment="Top" Foreground="Black" TextWrapping="Wrap" />
                    </StackPanel>
                </StackPanel>
            </Border>
        </DataTemplate>

    </ListBox.ItemTemplate>
</ListBox>

它的外观如何。您可以在图像和文本下方看到恼人的自由空间。太丑了...... :(

img

我会非常感谢解决方案。 :)

PS:如果我的英语有错误,不要害怕问我会解释。 :)

1 个答案:

答案 0 :(得分:0)

不要在数据模板中强制执行大小。修改后的DataTemplate将解决问题。

<DataTemplate>
    <Border BorderThickness="0,1,0,0"
            BorderBrush="Black"
            Margin="10">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition />
            </Grid.RowDefinitions>
            <Image Source="{Binding Image}"
                    Height="200"
                    Width="230"
                    VerticalAlignment="Top" />
            <TextBlock Text="{Binding Description}"
                        MaxHeight="290"
                        FontSize="20"
                        Grid.Row="1"
                        VerticalAlignment="Top"
                        Foreground="Black"
                        TextWrapping="Wrap" />
        </Grid>
    </Border>
</DataTemplate>