Создание облака тегов в WPF - PullRequest
3 голосов
/ 01 мая 2011

Я пытаюсь создать облако тегов в WPF на основе существующей реализации [ Источник загрузки ]. Я не совсем понял реализацию, и моя проблема в том, что вместо привязки FontSize к числу элементов в коллекции я хочу связать его с некоторыми другими значениями, содержащимися в классе. Так что в этой части здесь,

FontSize="{Binding Path=ItemCount, Converter={StaticResource CountToFontSizeConverter}}"

Я хочу связать размер шрифта с чем-то другим. Как я могу это сделать? Куда принадлежит ItemCount?

Спасибо

Ответы [ 2 ]

2 голосов
/ 01 мая 2011

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));
        }
    }
}
0 голосов
/ 01 мая 2011

ItemCount - это свойство любого экземпляра, содержащегося в свойстве DataContext объекта WPF, для которого вы хотите изменить FontSize.В дереве иерархии все, начиная с FrameworkElement и далее, наследует свойство «DataContext».

С «snoop» вы можете просматривать дерево пользовательского интерфейса приложения WPF во время выполнения и, например, рисуноккакие объекты живут в вашем DataContext в любой момент времени.

...