Pregunta

Me gustaría crear un control de WPF para una pestaña de la ventana, y yo quiero que tenga una forma particular. Algo como esto;

      +------------------------------+
      |                              |
*     |                              |
      |                              |
   +--+                              +--+
6  |                                    |  6
   +------------------------------------+   
     6       stretching section       6

Así que las pequeñas pestañas en la parte inferior izquierda y derecha abajo se fijan tamaño; 6x6, más o menos. Pero ahora quiero la sección central para estirarse a la anchura de cualquier recipiente en bofetada en.

Estoy usando un objeto de trazado por el momento, pero no puedo encontrar la manera de obtener una sección de estiramiento, o incluso si Path es el camino correcto a seguir.

Puede alguien sugerir la mejor manera de crear este tipo de forma de media estirable?

¿Fue útil?

Solución

Me hice la parte que se extiende en mi aplicación mediante la creación de un "StretchStackPanel" que hereda de StackPanel. La clase tiene el siguiente aspecto:

public class StretchStackPanel : StackPanel
{
    public static DependencyProperty StretchDependencyProperty = DependencyProperty.Register("Stretch", typeof(StretchMode), typeof(StretchStackPanel));

    protected override Size MeasureOverride(Size availableSize)
    {
        var baseSize = base.MeasureOverride(availableSize);

        if (availableSize.Width != double.PositiveInfinity && (Stretch & StretchMode.Horizontal) == StretchMode.Horizontal )
        {
            baseSize.Width = availableSize.Width;    
        }
        if (availableSize.Height != double.PositiveInfinity && (Stretch & StretchMode.Vertical) == StretchMode.Vertical)
        {
            baseSize.Height = availableSize.Height;
        }

        return baseSize;
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        var baseSize = base.ArrangeOverride(finalSize);

        if ((Stretch & StretchMode.Horizontal) == StretchMode.Horizontal )
        {
            baseSize.Width = finalSize.Width;    
        }

        if ((Stretch & StretchMode.Vertical) == StretchMode.Vertical)
        {
            baseSize.Height = finalSize.Height;
        }
        return baseSize;
    }

    [Category("Layout")]
    public StretchMode Stretch
    {
        get
        {
            return (StretchMode)GetValue(StretchDependencyProperty);
        }
        set
        {
            SetValue(StretchDependencyProperty, value);
        }
    }
}

Lo que queremos es una cuadrícula con 2 filas. El contenido de la fila superior debe tener su alineación horizontal se establece en el centro. el contenido de la fila inferior debe ser una StretchStackPanel.

Otros consejos

¿Por qué no crear dos diferentes widgets? Uno para la sección central y otro para la sección estirable. Entonces pegarlos juntos en otro recipiente para formar un control unificado.

Creo que debería reemplazar el método MeasureOverride en su control y obtener DesiredSize de su contenido (llamando al método Medida de contenido / niños). A continuación, puede crear su trayectoria sobre la base de este tamaño.

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