2016-10-15 2 views
0

В настоящее время я использовал SemanticZoom.ZoomedInView, который содержит ListView но я хотел бы использовать ItemsConrol вместо ListView по разным причинам главной из которых является, что ItemsControl приходят с переменными строк по высоте в зависимости от данных внутри, в отличие от ListView которая фиксированной высоты строки.Как использовать ItemsControl внутри SemanticZoom.ZoomedInView в UWP?

Но я не смог использовать 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

Update:

Вы можете использовать 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

Как вы можете предложить, используя ListView.ItemTemplate с помощью DataTemplate? Из-за его небольшого хлопота, чтобы создать все значения DataTemplate и добавить его вручную? – AbsoluteSith

+0

Спасибо! Работает! – AbsoluteSith

Смежные вопросы