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
) и выставляется по умолчанию. В каком случае вы пытаетесь достичь?