wpf binding user-controls readonly actualwidth

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); }