2009-03-11 12 views
5

Tengo una aplicación que muestra las tablas de ligas de las ligas deportivas. Estas tablas son básicamente cuadrículas con diferentes columnas que representan estadísticas para cada equipo, como partidos jugados, ganados, perdidos, goles marcados y concebidos, etc. Como tal, una tabla de ligas tiene una propiedad interesante: para una competencia determinada, siempre tenemos la misma cantidad de filas (que representan a los equipos). Como los controles de WPF son impersonales, probablemente podría usar un ListBox, un ListView, un ItemsControl directamente o incluso un DataGrid. No debería importar mucho.Cambiar el tamaño de la fuente en la lista o cuadrícula de WPF para usar espacio correctamente

Sin embargo, quiero algo que aún no he podido lograr: dado el tamaño de la tabla (en la práctica, el tamaño de la ventana), TODOS los equipos deberían estar visibles en todo momento (sin desplazamiento vertical), todos las columnas estadísticas (según lo elegido por el usuario) deben ser visibles, y el tamaño de la fuente debe reflejar esto para que sea lo más grande posible sin que ninguna columna sea demasiado grande para que los contenidos encajen.

Puedo usar fácilmente UniformGrid para lograr la parte de desplazamiento no vertical. Sin embargo, ajustar el tamaño de la fuente no parece ser tan fácil.

Por supuesto, ViewBox, que permitiría que el contenido de cada celda de la tabla individualmente se dimensione lo más posible, pero esto posiblemente llevaría a la fealdad ya que terminaría con un grupo de celdas con diferentes tamaños.

No espero obtener una respuesta fácil a esto, pero si es posible, me encantaría saberlo. En resumen:

  1. La tabla debe cambiar el tamaño de la ventana y mostrar siempre todos los datos sin barras de desplazamiento.

  2. El tamaño de la fuente debe establecerse en el mayor tamaño posible que permita que cada columna de cada fila muestre todos sus contenidos.

  3. Todas las columnas deben tener el tamaño más pequeño posible que permita que todo el contenido sea visible, excepto una columna que tiene "* -sizing" para ocupar el espacio restante.

So .. ¿Alguna forma inteligente de hacerlo? :)

Respuesta

7

¿Funcionaría para lo que necesita para hacer del elemento hijo de la ventana un ViewBox y poner todo el contenido dentro de él?No estoy seguro de si los detalles de lo que está haciendo harán que esto no funcione, pero aquí es un extremadamente simple ejemplo de lo que estoy sugiriendo:

<Window x:Class="ZoomTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1"> 
    <Viewbox> 
     <StackPanel> 
      <TextBlock>2</TextBlock> 
      <TextBlock>Getting longer</TextBlock> 
      <TextBlock>Here is some really long text...</TextBlock> 
     </StackPanel> 
    </Viewbox> 
</Window> 

Todo el contenido es siempre visible, con el tamaño de letra máximo posible. Todas las escalas de texto de manera uniforme.

+0

¡Lo tienes! +1 daño cerebral para mí, estaba pensando en viewboxes dentro de las células individuales, pero eso es, por supuesto, totalmente idiota. Solo tengo que controlar las propiedades de Stretch y debería estar en casa gratis, ¡gracias! –

1

Probablemente pueda hacer algo como esto con el tamaño de fuente. Establezca FontSize en una expresión vinculante que se una al TextBox mismo con un IValueConverter personalizado ({Binding RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource FontSizeConverter}} o algo así).

Dentro del convertidor, ahora tiene una referencia al TextBox que puede usar para obtener el contenido de texto, el tamaño del control, el tamaño de un control principal (la cuadrícula), etc. Puede ser capaz de usa esta información para calcularla sobre la marcha.

Si necesita los cuadros de texto para tomar esta decisión en función del uno al otro, puede tener una devolución de llamada estática en el nivel de página que llama desde el método Convertir que determinará si todavía está en modo de cambio de tamaño y realizar un seguimiento de cualquier otra información (formato mínimo o máximo ya calculado, etc.). Es un proceso complicado, pero debería haber algunas formas de hacerlo. Incluso puede ocultar el texto en todos los cuadros al principio, recorrer todos los cuadros de texto tomando esta clase de decisión (tamaño mínimo de fuente), y luego establecer el tamaño de fuente programáticamente y desvanecerlos a la vista.

+0

Gracias por su respuesta - Creo que veo cómo podría hacerlo de esta manera, pero la respuesta de Daniel Pratt lo resolvió sin el trabajo adicional, así que le di la respuesta aceptada. Gracias, gracias! –

Cuestiones relacionadas