Pregunta

Estoy tratando de construir una nube de etiquetas en WPF basado en una implementación existente [Fuente de descarga] No entendí por completo la implementación y mi problema es que, en lugar de tener el tamaño de FontSize a la cantidad de elementos en una colección, quiero vincularlo a otros valores contenidos en una clase. Entonces en esta parte aquí

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

Quiero atar el tamaño de la fuente a otra cosa. ¿Cómo puedo hacer eso? ¿A dónde pertenece ArtemCount?

Gracias

¿Fue útil?

Solución

ItemCount pertenece al grupo Dentro de la vista de colección que se genera a partir de esa etiqueta.

por ejemplo, si tengo una lista

AABBBC

Y los agrupo que obtengo:

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

El objetivo de una nube de etiquetas es unirse a esa propia propiedad porque desea visualizar con qué frecuencia se usa una determinada etiqueta.


Para responder a sus comentarios, la configuración de Bare-Bones debería ser algo como esto:

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

Supongo que su clase de objeto de datos expone las propiedades Name y Count, para asegurarse de que los cambios de tamaño como el conteo aumente, esa clase de objeto de datos debe implementar INotifyPropertyChanged, eso es todo lo que hay en ello.

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

Otros consejos

ItemCount es una propiedad de cualquier instancia que esté contenida en la propiedad DataContext del objeto WPF del que desea cambiar la FontSize. En el árbol de la jerarquía, todo desde FrameworkElement en adelante hereda la propiedad "DataContext".

Con "fisgonear" Puede buscar el árbol de interfaz de usuario de una aplicación WPF en tiempo de ejecución y, por ejemplo, descubrir qué objetos viven en su DataContext en cualquier momento dado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top