Saltar al contenido

WPF: establecer el ancho (y el alto) como un valor de porcentaje

Solución:

Puede colocar los cuadros de texto dentro de una cuadrícula para hacer valores porcentuales en las filas o columnas de la cuadrícula y dejar que los cuadros de texto se llenen automáticamente en sus celdas principales (como lo harán de manera predeterminada). Ejemplo:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="3*" />
    </Grid.ColumnDefinitions>

    <TextBox Grid.Column="0" />
    <TextBox Grid.Column="1" />
</Grid>

Esto hará que # 1 2/5 del ancho y # 2 3/5.

La forma de estirarlo al mismo tamaño que el contenedor principal es usar el atributo:

 <Textbox HorizontalAlignment="Stretch" ...

Eso hará que el elemento Textbox se estire horizontalmente y llene todo el espacio principal horizontalmente (en realidad, depende del panel principal que esté utilizando, pero debería funcionar en la mayoría de los casos).

Los porcentajes solo se pueden usar con valores de celda de cuadrícula, por lo que otra opción es crear una cuadrícula y colocar su cuadro de texto en una de las celdas con el porcentaje apropiado.

Normalmente, usaría un control de diseño integrado apropiado para su escenario (por ejemplo, use una cuadrícula como padre si desea escalar en relación con el padre). Si desea hacerlo con un elemento padre arbitrario, puede crear un ValueConverter para hacerlo, pero probablemente no será tan limpio como le gustaría. Sin embargo, si lo necesita absolutamente, puede hacer algo como esto:

public class PercentageConverter : IValueConverter
{
    public object Convert(object value, 
        Type targetType, 
        object parameter, 
        System.Globalization.CultureInfo culture)
    {
        return System.Convert.ToDouble(value) * 
               System.Convert.ToDouble(parameter);
    }

    public object ConvertBack(object value, 
        Type targetType, 
        object parameter, 
        System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Que se puede usar así, para obtener un cuadro de texto secundario con un 10% del ancho de su lienzo principal:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <local:PercentageConverter x:Key="PercentageConverter"/>
    </Window.Resources>
    <Canvas x:Name="canvas">
        <TextBlock Text="Hello"
                   Background="Red" 
                   Width="{Binding 
                       Converter={StaticResource PercentageConverter}, 
                       ElementName=canvas, 
                       Path=ActualWidth, 
                       ConverterParameter=0.1}"/>
    </Canvas>
</Window>
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *