Por que el ancho de la cuadrícula de WPF no cambia durante el bucle for

Rodrigo

Estoy tratando de hacer que un botón se deslice cuando hago clic en él. Para hacer esto, hice una cuadrícula para cambiar el ancho de la columna de modo que el botón parezca moverse:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Cuando hago clic en la cuadrícula, se comprueba el ancho de la primera columna. Si es 0, se cambia al ancho de la cuadrícula. Lo mismo para el otro lado.

Quiero que esto suceda en una animación, por lo que el ancho cambió con el tiempo, así que hice un bucle for para modificar el ancho de las columnas para que el control deslizante se mueva cuando hago clic en él.

Mi código a continuación:

private void MouseLeftDown_TwoSideButton(object sender, MouseButtonEventArgs e)
{
    double width = TwoSideButton.ActualWidth;
    double desiredColumnWidth = width - (TwoSideButton_Mid1Column.ActualWidth + TwoSideButton_Mid2Column.ActualWidth);

    int steps = 5;
    double stepSize = desiredColumnWidth / steps;

    bool leftSelected = true ? TwoSideButton_LeftSideColumn.ActualWidth == 0 : false;

    // Here I want to see the changes during for loop, not at the end of the loop.
    for (int i = 1; i <= steps; i++)
    {
        if (leftSelected)
        {
            TwoSideButton_LeftSideColumn.Width = new GridLength(i * stepSize);
            TwoSideButton_RightSideColumn.Width = new GridLength(desiredColumnWidth - i * stepSize);
        }
        else if (!leftSelected)
        {
            TwoSideButton_LeftSideColumn.Width = new GridLength(desiredColumnWidth - i * stepSize);
            TwoSideButton_RightSideColumn.Width = new GridLength(i * stepSize);
        }
    }
}

Y código XAML:

<Grid x:Name="TwoSideButton" Width="200" Height="25" Grid.Column="1" Grid.Row="6" MouseLeftButtonDown="MouseLeftDown_TwoSideButton">
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="TwoSideButton_LeftSideColumn" Width="0"/>
        <ColumnDefinition x:Name="TwoSideButton_Mid1Column" Width="20"/>
        <ColumnDefinition x:Name="TwoSideButton_Mid2Column" Width="20"/>
        <ColumnDefinition x:Name="TwoSideButton_RightSideColumn" Width="*"/>
    </Grid.ColumnDefinitions>

    <Border Grid.Column="0" CornerRadius="5" BorderThickness="1" BorderBrush="Black" Background="DarkOrange"  Grid.ColumnSpan="2"/>
    <Border Grid.Column="2" CornerRadius="5" BorderThickness="1" BorderBrush="Black" Background="RoyalBlue"  Grid.ColumnSpan="2"/>
    <Border Grid.Column="1" CornerRadius="5" Grid.ColumnSpan="2" BorderBrush="Black" BorderThickness="1">
        <Border.Background>
            <LinearGradientBrush EndPoint="1,0" StartPoint="1,1">
                <GradientStop Color="LightGray" Offset="0.9"/>
                <GradientStop Color="Gray"/>
            </LinearGradientBrush>
        </Border.Background>
    </Border>
    <TextBlock x:Name="TwoSideButton_LeftText" Text="Trabajando" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    <TextBlock x:Name="TwoSideButton_RightText" Text="Terminado" Grid.Column="3" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>

¡Gracias!

Bartosz Juja

La cuadrícula no se puede actualizar automáticamente mientras su bucle aún se está ejecutando

Una posible solución es hacer que todo el controlador de eventos sea asíncrono agregando un retraso de espera dentro de su ciclo:

await Task.Delay(100);

deberá marcar el controlador de su evento como asíncrono para que se compile:

private async void MouseLeftDown_TwoSideButton(object sender, MouseButtonEventArgs e)

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

WPF: cómo centrar el bloque de texto en la columna de cuadrícula si el texto es más largo que el ancho de la fila

WPF: cómo centrar el bloque de texto en la columna de cuadrícula si el texto es más largo que el ancho de la fila

La cuadrícula de Bootstrap no se extiende por todo el ancho de la pantalla

La cuadrícula de Bootstrap no se extiende por todo el ancho de la pantalla

Establecer el ancho de la cuadrícula en automático

¿Por qué los elementos fijos no se extienden a todo el ancho del área de la cuadrícula?

Material-UI: la cuadrícula receptiva no cambia de tamaño en el ancho del móvil

¿Cómo reducir el ancho de la barra de desplazamiento vertical de la cuadrícula de datos de WPF?

La cuadrícula CSS con la columna izquierda pegajosa se desplazará si el ancho de la cuadrícula es mayor que el 100% de su principal

Cómo evitar que el elemento de entrada exceda el ancho de la columna de cuadrícula CSS

Cómo evitar que el elemento de entrada exceda el ancho de la columna de cuadrícula CSS

¿Cómo hago para que un elemento secundario de la cuadrícula tenga el ancho de pantalla completo independientemente de la cuadrícula?

Formularios de Xamarin: ¿Obtener la imagen para rellenar el ancho de la columna de cuadrícula que contiene?

Cómo hacer que el widget del botón tkinter ocupe todo el ancho de la cuadrícula

Cambiar el tamaño de la cuadrícula de Bootstrap 4 cuando esté por debajo de cierto ancho

el ancho de la columna de distribución de cuadrícula de Android excede el ancho de la matriz

El diseño de cuadrícula de Bootstrap 4.1 es más ancho que la página

¿Por qué cuando agrego un espacio entre los cubos en una cuadrícula, todo el tamaño de la cuadrícula cambia?

El editor de filas de la cuadrícula vaadin cambia el orden de las columnas

Deshabilitar la cuadrícula antes de que el evento active WPF

Enlazar el ancho de la columna de la cuadrícula de dos plantillas de elementos

El cambio de tamaño de la cuadrícula Wpf no funciona después de que se movió el divisor

¿Cómo hacer que el ancho de la cuadrícula flexible se relacione con el ancho del niño más grande?

El método de cuadrícula de python tkinter no cambia la posición de la etiqueta

El encabezado de fila de la cuadrícula de datos no cambia de tamaño al contenido

Reaccionar: CSS no recalcula las alturas en el contenedor de la cuadrícula cuando cambia el estado

¿Por qué el ancho de la columna en la cuadrícula de datos no se establece con el convertidor de valores múltiples?

Cómo configurar el relleno automático al ancho de la columna de la cuadrícula

Kendo angular: establezca el ancho de la columna de la cuadrícula en CSS o SCSS