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 .

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top