Domanda

Sto cercando di creare un cloud tag in WPF in base a un'implementazione esistente [Download Fonte]. Non ho capito completamente l'implementazione e il mio problema è che invece di avere il fontsize vincolato al numero di elementi in una raccolta, voglio legarlo ad altri valori contenuti in una classe. Quindi in questa parte qui,

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

Voglio legare la fonttsize a qualcos'altro. Come lo faccio? A dove appartiene itemcount?

Grazie

È stato utile?

Soluzione

ItemCount appartiene al gruppo All'interno della vista della raccolta che viene generata da quel tag.

ad esempio, se ho un elenco

AABBBC

E li raggruppio ottengo:

Gruppo A: itemCount = 2
Gruppo B: itemCount = 3
Gruppo C: itemCount = 1

L'intero punto di un tag cloud è legarsi a quella stessa proprietà perché si desidera visualizzare la frequenza con cui viene utilizzato un determinato tag.


Per rispondere ai tuoi commenti, la configurazione delle ossa nude dovrebbe essere qualcosa del genere:

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

Presumo che la tua classe di oggetti dati esponga le proprietà Name e Count, per assicurarsi che le dimensioni cambiano in quanto il conteggio aumenta, la classe di oggetti dati deve implementare INotifyPropertyChanged, questo è tutto ciò che c'è.

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));
        }
    }
}

Altri suggerimenti

ItemCount è una proprietà di qualunque istanza sia contenuta nella proprietà DataContext dell'oggetto WPF che si desidera modificare la fontsize. Nell'albero della gerarchia, tutto da FrameworkElement In seguito eredita la proprietà "DataContext".

Insieme a "curiosare" Puoi esaminare l'albero dell'interfaccia utente di un'app WPF in runtime e ad esempio capire quali oggetti vivono nel tuo datacontext in qualsiasi momento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top