Сегментация и отображение контента из словаря - PullRequest
1 голос
/ 18 февраля 2012

Благодаря моему исходному программному коду я смог сгенерировать dictionary из {string, int} для некоторой длины (в основном 3).

В моем приложении я должен отобразить строки, разделенные semi-colon, а при наведении курсора на определенную строку он должен отображать соответствующий int строки как нечто вроде tooltip

Моя идея заключалась в том, чтобы отображать метки (равные количеству строк в словаре), содержимое каждой метки, выбираемое из ключей словаря, и отображать подсказку из соответствующей пары значений.

Хотя я могу генерировать эти ярлыки, как сказано выше, я не уверен, как я должен отображать их таким образом Label1 Content ; Label2 Content ; Label3 Content

Это правильный подход к выполнению этой вещи? И как должны отображаться метки в соответствии с приведенным выше макетом (на панели стека или чем-то еще? Как бы они были разделены ;, если бы я установил метки как дочерние элементы панели стека). Я не совсем уверен.

1 Ответ

1 голос
/ 18 февраля 2012

Вы захотите использовать ItemsControl с ItemsPanel, установленным на StackPanel с Orientation из Horizontal.

Посмотрите здесь - Использовать другой шаблон для последнего элемента в WPF itemscontrol .

Это решение в XAML, которое позволит вам пропустить точку с запятойпосле последнего элемента в ItemsControl.

Другая вещь, которую вы можете захотеть сделать, - это преобразовать ваш словарь в ObservableCollection типа 'Item' или что-то подобное, что означает, что вы можете использовать имена свойствв ваших ItemControl шаблонных привязках, которые аккуратнее.Что-то вроде:

var items = dictionary.Select(kv => new Item { Name = kv.Key, Value = kv.Value });
this.Items = new ObservableCollection<Item>(items);

Где Items - это тип ObservableCollection<Item>, а Item определяется как:

public class Item
{
    public string Name { get; set; }
    public int Value { get; set; }
}

Обратите внимание, что если вы создаете экземпляр ObservableCollection вкроме конструктора, ваш установщик свойства Items должен вызвать событие PropertyChanged, чтобы пользовательский интерфейс был уведомлен об изменении.

Я не знаю, сколько элементов вы визуализируете, ноВы также можете использовать WrapPanel, что позволит Label s оборачиваться после достижения определенной ширины.Обратите внимание, что WrapPanel, реализованный в WPF, не виртуализируется, поэтому он не будет работать так же хорошо для большого количества элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...