WPF UserControl выставляет ActualWidth

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

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

2 ответа

Решение

Что вам нужно, это свойство зависимостей 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);
}

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

Другие вопросы по тегам