但是我必須知道手前的行大小嗎?如果我需要文本內容並且每行的大小等於內容,會導致什麼情況。
不,你不需要。我假設你添加文字內容各ListViewItem
這樣的:
<ListView x:Name="listView" />
<Button VerticalAlignment="Bottom" Margin="0,5" Content="Add Text Item to ListView" Click="Button_Click" />
後面的代碼:
private static string RandomString(int Size)
{
string input = "abcdefghijklmnopqrstuvwxyz";
var chars = Enumerable.Range(0, Size)
.Select(x => input[new Random().Next(0, input.Length)]);
return new string(chars.ToArray());
}
private void Button_Click(object sender, RoutedEventArgs e)
{
listView.Items.Add(RandomString(new Random().Next(1, 1000)));
}
然後,它會生成一個默認TextBlock
遏制Text
:
問題是TextBlock
的屬性被設置爲默認或計算值:
這讓所有的物品具有相同的大小,但如果添加文本內容是這樣的原因是不相關的ListView
控制:
private void Button_Click(object sender, RoutedEventArgs e)
{
TextBlock tb = new TextBlock();
tb.Text = RandomString(new Random().Next(1, 500));
tb.TextWrapping = TextWrapping.Wrap;
listView.Items.Add(tb);
}
然後你就可以找到區別:
更新:
您可以使用DataTemplate
這樣的:
<ListView x:Name="listView" ItemsSource="{x:Bind Collection}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock TextWrapping="Wrap" Text="{Binding ItemText}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
後面的代碼:
private ObservableCollection<Model> Collection = new ObservableCollection<Model>();
protected override void OnNavigatedTo(NavigationEventArgs e)
{
for (int i = 0; i < 50; i++)
{
Collection.Add(new Model { ItemText = RandomString(new Random().Next(100, 500)) });
}
}
public class Model
{
public string ItemText { get; set; }
}
新的渲染圖像:
我用了一個默認的'ListView'放4種不同尺寸的「矩形」作爲4個項目,您可以選擇e [渲染圖像](https://i.stack.imgur.com/jAnD7.gif),因此「與具有固定行高的ListView不同」。那你的意思是什麼? –
但是我必須知道前面的行的大小正確嗎?如果我需要文本內容並且每行的大小等於內容,會導致什麼情況。 – AbsoluteSith
我寫了一個答案來解釋這種行爲,如果你還有問題,請留下評論。 –