¿Puedo tener lo siguiente (ActualWidth
dividido entre 2)?¿Se puede aplicar un operador matemático a la ruta de enlace?
<StackPanel Name="SP2" Width="{Binding ElementName=SP1, Path=ActualWidth/2}">
Parece que no funciona para mí.
Gracias.
¿Puedo tener lo siguiente (ActualWidth
dividido entre 2)?¿Se puede aplicar un operador matemático a la ruta de enlace?
<StackPanel Name="SP2" Width="{Binding ElementName=SP1, Path=ActualWidth/2}">
Parece que no funciona para mí.
Gracias.
Puede usar un convertidor personalizado para realizar cálculos simples directamente en XAML.
echar un vistazo, por ejemplo, en esta aplicación: el uso
simple:
<RotateTransform Angle="{Binding Text, ElementName=Seconds,
Converter={ikriv:MathConverter}, ConverterParameter=x*6}" />
El enfoque clásico es el de crear una propiedad de sólo lectura calculada. Por lo tanto, en este caso simple puede agregar una segunda propiedad HalfWidth
.
public double HalfWidth
{
get
{
return ActualWidth/2.0;
}
}
La mala noticia es que cuando ActualWidth
se actualiza, el StackPanel
en la vista con destino a HalfWidth
no va a actualizar. Esto se debe a que la vista no sabe que HalfWidth
ha cambiado.
Al generar un evento cambiado propiedad en HalfWidth
en el conjunto de ActualWidth
, la vista consultará HalfWidth
y, por lo tanto, recuperará el valor correcto.
private double _actualWidth;
public double ActualWidth
{
get
{
return _actualWidth;
}
set
{
if (_actualWidth != value)
{
_actualWidth = value;
OnPropertyChanged("ActualWidth");
OnPropertyChanged("HalfWidth");
}
}
}
La principal proplem acerca de este enfoque es que pronto se convertirá en una pesadilla cuando tenemos numerosas propiedades calculadas sin definidores.
Es por eso que (en un patrón MVVM) personalmente prefiero usar un convertidor personalizado.
Gracias. ¿Cómo se decidiría si realizar todo este esfuerzo o simplemente tener una línea en el controlador de eventos SizeChanged de Windows en ¿código detrás? –
@Old Geezer He actualizado mi respuesta –
No, solo puede usar propiedades (e índices en matrices/colecciones en algunos casos) en enlaces.
En su lugar, debe vincular a una propiedad de notificación que devuelve el valor previsto (por ejemplo, ActualWidth/2) o utilizar un convertidor que devuelve un valor con su cálculo aplicado.
¿Qué estás tratando de hacer? Obtener 'Ancho' establecido a la mitad del valor de' SP1.ActualWidth'? Si es así, un 'Convertidor 'es probablemente lo que buscas. –
No utilice 'ActualWidth' en los enlaces, ya que no es una propiedad de dependencia y no necesariamente hará lo que usted espera. Consulte las preguntas http://stackoverflow.com/questions/7403151 (WPF) y http://stackoverflow.com/questions/1602148 (Silverlight). –
@PhilipKendall, sí, eso era lo que estaba tratando de hacer. Quiero que SP2 tenga la mitad del ancho de SP1 cada vez que se cambia el tamaño de la ventana. –