locked
Элементы listbox разных размеров RRS feed

  • Вопрос

  • В listbox нужно чтобы строки были разных размеров, как этого добиться?
    4 августа 2012 г. 8:29

Ответы

  • Если Вам нужно, чтобы элементы списка были под размер текста в них, то я бы сделал что-то типа такого:

    <ListBox Name="lstStrings" >
       <ListBox.ItemTemplate>
          <DataTemplate>
             <TextBlock Text="{Binding Path=ItemText}" TextWrapping="Wrap" />
          </DataTemplate>
       </ListBox.ItemTemplate>
    </ListBox>

    А данные привязал бы, например, так:

    ObservableCollection<TempItem> _collection = null;
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
       _collection = new ObservableCollection<TempItem>();
       for (var i = 0; i < 50; ++i)
       {
          _collection.Add(new TempItem() { ItemText = GetRandomString() });
       }
       lstStrings.ItemsSource = _collection;
       base.OnNavigatedTo(e);
    }

    TempItem - это класс с одним текстовым свойством ItemText.

    Не очень удачный пример. Наиболее удачное решение создать привязку данных для свойства Height. В шаблоне 

    ListBox.ItemTemplate

    • Изменено Viktor Borisov 6 августа 2012 г. 4:15
    • Предложено в качестве ответа PetrishkoMVP 6 августа 2012 г. 9:26
    • Помечено в качестве ответа PetrishkoMVP 9 августа 2012 г. 21:35
    6 августа 2012 г. 4:15

Все ответы

  • Если Вам нужно, чтобы элементы списка были под размер текста в них, то я бы сделал что-то типа такого:

    <ListBox Name="lstStrings" >
       <ListBox.ItemTemplate>
          <DataTemplate>
             <TextBlock Text="{Binding Path=ItemText}" TextWrapping="Wrap" />
          </DataTemplate>
       </ListBox.ItemTemplate>
    </ListBox>

    А данные привязал бы, например, так:

    ObservableCollection<TempItem> _collection = null;
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
       _collection = new ObservableCollection<TempItem>();
       for (var i = 0; i < 50; ++i)
       {
          _collection.Add(new TempItem() { ItemText = GetRandomString() });
       }
       lstStrings.ItemsSource = _collection;
       base.OnNavigatedTo(e);
    }

    TempItem - это класс с одним текстовым свойством ItemText.

    4 августа 2012 г. 10:28
  • Если Вам нужно, чтобы элементы списка были под размер текста в них, то я бы сделал что-то типа такого:

    <ListBox Name="lstStrings" >
       <ListBox.ItemTemplate>
          <DataTemplate>
             <TextBlock Text="{Binding Path=ItemText}" TextWrapping="Wrap" />
          </DataTemplate>
       </ListBox.ItemTemplate>
    </ListBox>

    А данные привязал бы, например, так:

    ObservableCollection<TempItem> _collection = null;
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
       _collection = new ObservableCollection<TempItem>();
       for (var i = 0; i < 50; ++i)
       {
          _collection.Add(new TempItem() { ItemText = GetRandomString() });
       }
       lstStrings.ItemsSource = _collection;
       base.OnNavigatedTo(e);
    }

    TempItem - это класс с одним текстовым свойством ItemText.

    Не очень удачный пример. Наиболее удачное решение создать привязку данных для свойства Height. В шаблоне 

    ListBox.ItemTemplate

    • Изменено Viktor Borisov 6 августа 2012 г. 4:15
    • Предложено в качестве ответа PetrishkoMVP 6 августа 2012 г. 9:26
    • Помечено в качестве ответа PetrishkoMVP 9 августа 2012 г. 21:35
    6 августа 2012 г. 4:15