Erstellen einer Tag -Cloud in WPF
Frage
Ich versuche, eine Tag -Cloud in WPF basierend auf zu erstellen eine vorhandene Implementierung [Quelle herunterladen]. Ich habe die Implementierung nicht vollständig verstanden und mein Problem ist, dass ich sie an einige andere Werte binden möchte, die in einer Klasse enthalten sind, anstatt das für die Anzahl der Elemente in einer Sammlung geförderten Punkte zu haben. Also in diesem Teil hier,
FontSize="{Binding Path=ItemCount, Converter={StaticResource CountToFontSizeConverter}}"
Ich möchte die Schriftart an etwas anderes binden. Wie mache ich das? Woher gehört ItemCount?
Vielen Dank
Lösung
ItemCount
gehört zum Gruppe In der Sammlungsansicht, die aus diesem Tag generiert wird.
ZB, wenn ich eine Liste habe
Aabbbc
Und ich gruppiere sie ich bekomme:
Gruppe A: ItemCount = 2
Gruppe B: ItemCount = 3
Gruppe C: ItemCount = 1
Der springende Punkt einer Tag-Cloud besteht darin, genau an diese Eigenschaft zu binden, da Sie sich vorstellen möchten, wie oft ein bestimmtes Tag verwendet wird.
Um auf Ihre Kommentare zu antworten, sollte das Bleee-Bones-Setup so etwas sein:
<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>
Ich gehe davon aus, dass Ihre Daten-Objekt-Klasse die Eigenschaften enthüllt Name
und Count
, um sicherzustellen, dass sich die Größen ändert, wenn die Anzahl steigt, diese Daten-Objekt-Klasse muss implementiert werden INotifyPropertyChanged
, Das ist ungefähr alles, was es gibt.
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));
}
}
}
Andere Tipps
ItemCount ist eine Eigenschaft der Instanz, die in der DataContext -Eigenschaft des WPF -Objekts enthalten ist, das Sie ändern möchten. Im Hierarchiebaum, alles von FrameworkElement
Weiter erbt die Eigenschaft "Datacontext".
Mit "Snoop" Sie können sich zur Laufzeit in den UI -Baum einer WPF -App untersuchen und z. B. herausfinden, welche Objekte zu einem bestimmten Zeitpunkt in Ihrem DataContext leben.