WPF UserControl expone ActualWidth
binding user-controls (2)
ActualWidth
es una propiedad pública de solo lectura (que proviene de FrameworkElement
) y está expuesta por defecto. ¿Cuál es el caso que estás tratando de lograr?
¿Cómo ActualWidth
propiedad ActualWidth
de uno de los componentes de mi control de usuario a los usuarios?
He encontrado muchos ejemplos de cómo exponer una propiedad normal creando una nueva propiedad de dependencia y enlace, pero ninguna sobre cómo exponer una propiedad de solo lectura como ActualWidth
.
Lo que necesita es una propiedad de dependencia ReadOnly. Lo primero que debe hacer es acceder a la notificación de cambio de la dependencia ActualWidthProperty
del control que necesita exponer. Puedes hacer eso usando DependencyPropertyDescriptor
esta manera:
// Need to tap into change notification of the FrameworkElement.ActualWidthProperty
Public MyUserControl()
{
DependencyPropertyDescriptor descriptor = DependencyPropertyDescriptor.FromProperty
(FrameworkElement.ActualWidthProperty, typeof(FrameworkElement));
descriptor.AddValueChanged(this.MyElement, new EventHandler
OnActualWidthChanged);
}
// Dependency Property Declaration
private static DependencyPropertyKey ElementActualWidthPropertyKey =
DependencyProperty.RegisterReadOnly("ElementActualWidth", typeof(double),
new PropertyMetadata());
public static DependencyProperty ElementActualWidthProperty =
ElementActualWidthPropertyKey.DependencyProperty;
public double ElementActualWidth
{
get{return (double)GetValue(ElementActualWidthProperty); }
}
private void SetActualWidth(double value)
{
SetValue(ElementActualWidthPropertyKey, value);
}
// Dependency Property Callback
// Called when this.MyElement.ActualWidth is changed
private void OnActualWidthChanged(object sender, Eventargs e)
{
this.SetActualWidth(this.MyElement.ActualWidth);
}