WPF UserControl выставляет ActualWidth - PullRequest
3 голосов
/ 24 ноября 2008

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

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

Ответы [ 2 ]

8 голосов
/ 25 ноября 2008

Вам нужно свойство зависимости 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 голосов
/ 24 ноября 2008

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

...