3

既存の実装[ソースのダウンロード]に基づいて、WPF でタグ クラウドを構築しようとしています。私は実装を完全には理解していませんでした。私の問題は、FontSize をコレクション内のアイテムの数にバインドする代わりに、クラスに含まれる他の値にバインドしたいということです。この部分では、

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

FontSize を別のものにバインドしたい。それ、どうやったら出来るの?ItemCount はどこに属しますか?

ありがとう

4

2 に答える 2

2

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));
        }
    }
}
于 2011-05-01T12:45:19.057 に答える
0

ItemCountは、FontSizeを変更するWPFオブジェクトのDataContextプロパティに含まれるインスタンスのプロパティです。階層ツリーでは、それFrameworkElement以降はすべて「DataContext」プロパティを継承します。

「スヌープ」を使用すると、実行時にWPFアプリのUIツリーを調べて、たとえば、任意の時点でDataContextに存在するオブジェクトを把握できます。

于 2011-05-01T12:32:54.990 に答える