2008-11-23 3 views
3

Как я могу показать объект ActualWidth одного из компонентов моего пользовательского элемента управления для пользователей?WPF UserControl expose ActualWidth

Я нашел множество примеров того, как выставить нормальное свойство, создав новое свойство зависимостей и привязку, но ни один из них не раскрывает свойство только для чтения, как ActualWidth.

ответ

8

Что вам нужно, это свойство зависимостей ReadOnly. Первое, что вам нужно сделать, это нажать на уведомление об изменении зависимости ActualWidthProperty от элемента управления, который вам нужно открыть. Вы можете сделать это с помощью DependencyPropertyDescriptor так:

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

ActualWidth является общедоступным свойством readonly (исходя из FrameworkElement) и отображается по умолчанию. В каком случае вы пытаетесь достичь?

+0

это общественное для всего управления, но не для одного из конкретных компонентов управления состоит из. – MJS 2008-11-24 21:15:18