Создание облака тегов в WPF
Вопрос
Я пытаюсь создать облако тегов в WPF на основе существующая реализация [Скачать источник] Я не полностью понял реализацию, и моя проблема заключается в том, что вместо того, чтобы разобраться с количеством элементов в коллекции, я хочу связать ее с некоторыми другими значениями, содержащимися в классе. Итак, в этой части здесь,
FontSize="{Binding Path=ItemCount, Converter={StaticResource CountToFontSizeConverter}}"
Я хочу связать размер с чем -то другим. Как я могу это сделать? Где принадлежит Itemcount?
Спасибо
Решение
ItemCount
принадлежит к группа Внутри вида коллекции, который генерируется из этого тега.
например, если у меня есть список
AABBBC
И я группирую их, я получаю:
Группа A: itemcount = 2
Группа B: itemCount = 3
Группа C: itemcount = 1
Весь смысл облака тега состоит в том, чтобы привязать к этому самому свойству, потому что вы хотите визуализировать, как часто используется определенный тег.
Чтобы ответить на ваши комментарии, настройка с голой кости должна быть чем-то вроде этого:
<ItemsControl ItemsSource="{Binding Data}">
<ItemsControl.Resources>
<vc:CountToFontSizeConverter x:Key="CountToFontSizeConverter"/>
</ItemsControl.Resources>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" Margin="2"
FontSize="{Binding Count, Converter={StaticResource CountToFontSizeConverter}}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Я предполагаю, что ваш класс-объект данных раскрывает свойства Name
а также Count
, чтобы убедиться, что изменения размера по мере увеличения количества, которые необходимо реализовать класс-объект данных. INotifyPropertyChanged
, это все, что есть для этого.
public class Tag : INotifyPropertyChanged
{
private string _name = null;
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged("Name");
}
}
}
private int _count = 0;
public int Count
{
get { return _count; }
set
{
if (_count != value)
{
_count = value;
OnPropertyChanged("Count");
}
}
}
//...
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Другие советы
ItemCount - это свойство любого экземпляра, содержащегося в свойстве DataContext объекта WPF, который вы хотите изменить. В дереве иерархии все от FrameworkElement
В дальнейшем наследуют свойство «датчантекстое контекст».
С "Снуп" Вы можете заглянуть в дерево пользовательского интерфейса приложения WPF во время выполнения и, например, выяснить, какие объекты живут в вашем данных DataContext в любой момент времени.