¿Hay alguna forma de vincular el ancho de un elemento de la interfaz de usuario con el porcentaje de ancho de otro elemento? si mi Datagrid es 100px, quiero que mi TextBlock sea el 60% de eso = 60px (el ancho de la cuadrícula de datos es dinámico).

0
user9641573 5 may. 2018 a las 19:34

3 respuestas

La mejor respuesta

La forma en que probablemente haría esto es con un convertidor.
Puede vincular el ancho de TextBlock al ancho real de DataGrid y luego usar un convertidor para aplicar el factor.

public class MultiplyConverter : MarkupExtension, IValueConverter
{
    public double Multiplier { get; set; }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        double bound = System.Convert.ToDouble(value);
        return bound * Multiplier;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }
}

Algo así como:

Width="{Binding ActualWidth,  ElementName=MyDataGrid, Converter={ui:MultiplyConverter Multiplier=.6}}"
0
Shloime Rosenblum 6 may. 2018 a las 18:10

En Grid puede dar ancho proporcional para columnas, como:

<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="3*"/>

El primero podría ser usted DataGrid y el segundo es TextBlock. De esta forma, TextBlock tendrá el 60% del ancho de DataGrid y también responderá a los cambios de tamaño.

0
Ismail Hakki Tekin 5 may. 2018 a las 16:48

No creo que sea muy difícil, ¿o sí?

myTextBox.Height = ((double)DataGrid.Height / 60) * 100
0
Aousaf rashid 5 may. 2018 a las 16:53