2016-10-15 65 views
0

我現在已經使用了SemanticZoom.ZoomedInView含有ListView但我想用ItemsConrol而不是ListView由於種種原因主要其中之一是ItemsControl附帶根據內部數據變量高度行,不像ListView已固定的行高。如何在UWP中的SemanticZoom.ZoomedInView中使用ItemsControl?

但我無法使用ItemsControl,因爲SemanticZoom.ZoomedInView只需要ListViewBase類型的元素。那麼我的其他選擇是什麼。

+0

我用了一個默認的'ListView'放4種不同尺寸的「矩形」作爲4個項目,您可以選擇e [渲染圖像](https://i.stack.imgur.com/jAnD7.gif),因此「與具有固定行高的ListView不同」。那你的意思是什麼? –

+0

但是我必須知道前面的行的大小正確嗎?如果我需要文本內容並且每行的大小等於內容,會導致什麼情況。 – AbsoluteSith

+0

我寫了一個答案來解釋這種行爲,如果你還有問題,請留下評論。 –

回答

1

但是我必須知道手前的行大小嗎?如果我需要文本內容並且每行的大小等於內容,會導致什麼情況。

不,你不需要。我假設你添加文字內容各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

enter image description here

問題是TextBlock的屬性被設置爲默認或計算值:

enter image description here

這讓所有的物品具有相同的大小,但如果添加文本內容是這樣的原因是不相關的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); 
} 

然後你就可以找到區別:

enter image description here

更新:

您可以使用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; } 
} 

新的渲染圖像:

enter image description here

+0

如何在使用DataTemplate使用ListView.ItemTemplate時提出這樣的建議?導致它有點麻煩創建所有的DataTemplate值並手動添加它? – AbsoluteSith

+0

謝謝!作品! – AbsoluteSith

相關問題