Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WPF中构建标记云_Wpf_Xaml_Tag Cloud - Fatal编程技术网

在WPF中构建标记云

在WPF中构建标记云,wpf,xaml,tag-cloud,Wpf,Xaml,Tag Cloud,我正在尝试基于[]在WPF中构建标记云。我没有完全理解实现,我的问题是,我不想将FontSize绑定到集合中的项数,而是想将它绑定到类中包含的其他值。所以在这一部分 FontSize="{Binding Path=ItemCount, Converter={StaticResource CountToFontSizeConverter}}" 我想把FontSize绑定到其他东西上。我该怎么做?ItemCount属于哪里 感谢ItemCount是WPF对象的DataContext属性中包含的任何

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

FontSize="{Binding Path=ItemCount, Converter={StaticResource CountToFontSizeConverter}}"
我想把FontSize绑定到其他东西上。我该怎么做?ItemCount属于哪里


感谢

ItemCount是WPF对象的DataContext属性中包含的任何实例的属性,您要更改其FontSize。在层次结构树中,从
FrameworkElement
开始的所有内容都继承“DataContext”属性


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

ItemCount
属于从该标记生成的集合视图内部

e、 g.如果我有一份清单

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

我不太明白史努比在找什么。我不能将绑定路径设置为其他路径吗?例如,我在主窗口中有一个整数列表?是的,但我已经有了数据,我无法计算它们。我所拥有的更像是字符串int类型的键值列表,我想制作一个标记云,用FontSize显示字符串的int值。那么,对于该实现,您绝对没有任何用处。您可以将其放入ItemsControl并对其进行模板化。嗯,你至少不需要重写转换器,但是所有的分组魔法都是毫无意义的。也许这是真的。根据您的建议,标签云是否仍然能够随着列表的变化而动态更新?你能解释一下怎么做吗?在我的回答中添加了更多的信息。@H.B.非常感谢。我会努力的,如果出了什么问题,我会回来的。
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));
        }
    }
}