WPF UserControl espone ActualWidth
-
10-07-2019 - |
Domanda
Come posso esporre agli utenti la proprietà ActualWidth
di uno dei componenti del mio controllo utente?
Ho trovato molti esempi su come esporre una proprietà normale creando una nuova proprietà di dipendenza e associazione, ma nessuno su come esporre una proprietà di sola lettura come ActualWidth
.
Soluzione
Ciò di cui hai bisogno è una proprietà di dipendenza ReadOnly. La prima cosa che devi fare è attingere alla notifica di modifica della dipendenza ActualWidthProperty
sul controllo che devi esporre. Puoi farlo usando DependencyPropertyDescriptor
in questo modo:
// 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);
}
Altri suggerimenti
ActualWidth
è una proprietà di sola lettura pubblica (proveniente da FrameworkElement
) ed è esposta per impostazione predefinita. Qual è il caso che stai cercando di ottenere?