在WPF中构建标记云



我正在尝试基于现有实现在WPF中构建一个标记云。我没有完全理解的实现和我的问题是,而不是有FontSize绑定到一个集合中的项目的数量,我想将它绑定到一个类中包含的一些其他值。在这部分,

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

我想把字体大小绑定到别的东西上。我怎么做呢?ItemCount属于哪里?

谢谢

ItemCount属于由该Tag生成的集合视图中的

。如果我有一个列表

A A B B B C

将它们分组得到:

组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>

我假设你的数据对象类暴露属性NameCount,以确保大小随着计数的增加而变化,数据对象类需要实现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是包含在您想要更改其字体大小的WPF对象的DataContext属性中的任何实例的属性。在层次结构树中,从FrameworkElement开始的所有内容都继承了"DataContext"属性。

使用"snoop"你可以在运行时查看WPF应用程序的UI树,例如,在任何给定的时间找出在你的DataContext中存在的对象

相关内容

  • 没有找到相关文章

最新更新