Pregunta Combinar expansor y rejilla (expansor de tamaño variable)


Me gustaría tener algo así como un Expansor de tamaño variable. Mi idea básica era algo como esto:

<Grid HorizontalAlignment="Left">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="2" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>

    <Expander Grid.Column="0" ExpandDirection="Right">
          ...
    </Expander>

    <GridSplitter Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />

    ...
</Grid>

El problema con esto: si muevo el divisor de cuadrícula y colapsa el expansor, tengo un área grande vacía. ¿Cómo se puede colapsar toda la columna? ¿O hay otra forma de hacer que el expansor sea "redimensionable"?


15
2018-04-05 14:19


origen


Respuestas:


No estoy seguro de lo que está tratando de lograr, pero creo que conceptualmente el Grid debe ser parte de la Expander.Content, ¿Que este trabajo para usted?

<Expander Header="Test" ExpandDirection="Right" HorizontalAlignment="Left" Background="LightBlue">
    <Expander.Content>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="5"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="Lorem ipsum dolor sit"/>
            <GridSplitter Grid.Column="1" Width="5" ResizeBehavior="PreviousAndCurrent" ResizeDirection="Columns"/>
        </Grid>
    </Expander.Content>
</Expander>

Editar: Se eliminó todo el disparo de la primera columna, ya que parecía innecesario.

Además: para que esto funcione verticalmente, el GridSplitter HorizontalAlignment debe configurarse para Stretch, de lo contrario, tendrá un ancho cero por defecto (por supuesto, todo lo demás que es específico de orientación debe ser adaptado también, pero eso es sencillo)

HorizontalAlignment es el acceso de propiedad de Microsoft .NET para lo que en realidad es una propiedad de dependencia. Esta propiedad de dependencia particular con bastante frecuencia tiene su aparente valor "predeterminado" establecido de manera diferente en elementos subclase, particularmente controles. [...] Por ejemplo, el "predeterminado" aparente de HorizontalAlignment para un control Label será Left, incluso si Label hereda HorizontalAlignment directamente de FrameworkElement. Esto se debe a que ese valor se restableció dentro del estilo predeterminado de Etiqueta, dentro de la plantilla de control del estilo.


20
2018-04-05 15:22



Tal vez esto ayude a resolver su problema de "colapso de columna"

XAML:

Añadir <Grid>  Name="expGrid" y agregue <Expander>  Collapsed="Expander_Collapsed"

C # Code:

private void Expander_Collapsed(object sender, RoutedEventArgs e)
{
  var colomnIndex = Grid.GetColumn(sender as Expander);
  var colomn = expGrid.ColumnDefinitions[colomnIndex];
  colomn.Width = GridLength.Auto;
}

1
2018-04-05 15:14