Ho un controllo che eredita dal controllo (lo avete indovinato). Desidero ricevere una notifica ogni volta che le proprietà FontSize
o Style
vengono modificate. In WPF, lo farei chiamando DependencyProperty.OverrideMetadata()
. Ovviamente, cose utili come quella non hanno posto in Silverlight. Quindi, come si potrebbe ricevere questo tipo di notifiche?Silverlight: come ricevere la notifica di una modifica in una DependencyProperty ereditata
risposta
Penso che qui sia un modo migliore. Devo ancora vedere i pro e i contro.
/// Listen for change of the dependency property
public void RegisterForNotification(string propertyName, FrameworkElement element, PropertyChangedCallback callback)
{
//Bind to a depedency property
Binding b = new Binding(propertyName) { Source = element };
var prop = System.Windows.DependencyProperty.RegisterAttached(
"ListenAttached"+propertyName,
typeof(object),
typeof(UserControl),
new System.Windows.PropertyMetadata(callback));
element.SetBinding(prop, b);
}
E ora, è possibile chiamare RegisterForNotification per registrarsi per una notifica di modifica di una proprietà di un elemento, come.
RegisterForNotification("Text", this.txtMain,(d,e)=>MessageBox.Show("Text changed"));
RegisterForNotification("Value", this.sliderMain, (d, e) => MessageBox.Show("Value changed"));
Vedere il mio post qui sulla stessa http://amazedsaint.blogspot.com/2009/12/silverlight-listening-to-dependency.html
Usando Silverlight 4.0 beta.
Questo è quello che ho sempre utilizzare (non sono testati su SL, però, solo in WPF):
/// <summary>
/// This method registers a callback on a dependency object to be called
/// when the value of the DP changes.
/// </summary>
/// <param name="owner">The owning object.</param>
/// <param name="property">The DependencyProperty to watch.</param>
/// <param name="handler">The action to call out when the DP changes.</param>
public static void RegisterDepPropCallback(object owner, DependencyProperty property, EventHandler handler)
{
// FIXME: We could implement this as an extension, but let's not get
// too Ruby-like
var dpd = DependencyPropertyDescriptor.FromProperty(property, owner.GetType());
dpd.AddValueChanged(owner, handler);
}
Sono sicuro che DependencyPropertyDescrtiptors sono animali mitici in Silverlight, sfortunatamente. – MojoFilter
DependencyPropertyDescriptor non è supportato da Silverlight 2 o 3 – markti
Non è possibile ascoltare esternamente alla dipendenza proprietà cambiato notifiche.
È possibile accedere al Dependency Property metadati con la seguente riga di codice:
PropertyMetadata metaData = Control.ActualHeightProperty.GetMetadata(typeof(Control));
Tuttavia, l'unico membro del pubblico che è esposto è "DefaultValue".
Ci sono molti modi per farlo in WPF. Ma al momento non sono supportati da Silverlight 2 o 3.
L'unica soluzione che vedo è ascoltare l'evento LayoutUpdated - sì, so che è chiamato molto. Si noti tuttavia che in alcuni casi non verrà chiamato anche se FontSize o Style è cambiato.
È un trucco piuttosto disgustoso, ma è possibile utilizzare un binding a due vie per simulare questo.
vale a dire avere qualcosa di simile:
public class FontSizeListener {
public double FontSize {
get { return fontSize; }
set { fontSize = value; OnFontSizeChanged (this, EventArgs.Empty); }
}
public event EventHandler FontSizeChanged;
void OnFontSizeChanged (object sender, EventArgs e) {
if (FontSizeChanged != null) FontSizeChanged (sender, e);
}
}
quindi creare il legame simile:
<Canvas>
<Canvas.Resources>
<FontSizeListener x:Key="listener" />
</Canvas.Resources>
<MyControlSubclass FontSize="{Binding Mode=TwoWay, Source={StaticResource listener}, Path=FontSize}" />
</Canvas>
poi collegare al caso di chi ascolta nella sottoclasse di controllo.
Quando la proprietà FontSize di MyControlSubclass cambia, l'associazione sarà chiara, quindi sembra che non funzioni? non? –
- 1. Come ricevere una notifica quando viene notificata una notifica
- 2. Come ricevere una notifica al termine di una build completata?
- 3. ricevere una notifica quando UITextField diventaFirstResponder
- 4. Come ricevere una notifica quando l'applicazione viene chiusa in Android
- 5. Come ricevere una notifica via email quando le etichette assegnate al cambio di modifica
- 6. Come nascondere una proprietà ereditata in una classe senza modificare la classe ereditata (classe base)?
- 7. Dove e come registrare un oggetto per ricevere una notifica?
- 8. Come ricevere una notifica quando un utente cambia password o richiede una reimpostazione della password?
- 9. Associare una proprietà DependencyProperty a un altro readonly DependencyProperty
- 10. Come ricevere la notifica a contatto evento modificato in IOS?
- 11. Come ricevere una notifica quando una finestra viene messa a fuoco in WPF?
- 12. RxJava Osservabile ricevere una notifica sulla prima emissione
- 13. Come ricevere una notifica quando la finestra si chiude nell'estensione di Firefox?
- 14. È possibile ricevere una notifica quando UITableView termina lo scorrimento?
- 15. Posso ricevere una notifica quando inizia un nuovo giorno?
- 16. C'è un modo per ricevere una notifica quando la mia proprietà UIImageView.image cambia?
- 17. Come ricevere notifica di spostamento UITableViewCell inizio e fine
- 18. Come ricevere una notifica quando è terminata una transizione tra le attività?
- 19. classe ereditata modifica variabile in Python
- 20. Come posso ricevere una notifica quando viene creata una nuova finestra su Win32?
- 21. Come ricevere una notifica quando la griglia è cambiata nella griglia utente AngularJS?
- 22. Come ricevere una notifica quando lo stato di SMS cambia da "In coda" a "Inviato"?
- 23. Rendere una classe non ereditata
- 24. - modifica notifica
- 25. Come sovrascrivere una proprietà di classe ereditata in C#?
- 26. NSUserDefault modifica notifica gestione in watchppExtension
- 27. Modifica del tipo di una proprietà ereditata (in un tipo ereditato)
- 28. Modifica dei pulsanti di azione su una notifica
- 29. Come si disegna una stringa in una bitmap in Silverlight?
- 30. Modifica del margine di animazione in Silverlight
Mi piace il fatto che questo sia un modo più bello di avvolgere quella brutta legatura, ma questo è un modo terribilmente pesante per ottenere notifiche di modifica della proprietà. – MojoFilter
Finché abbiamo bisogno di farlo interamente dal codice, suppongo che non abbiamo un'altra opzione finché non avremo il DependencyPropertyDescriptor in Silverlight da MS – amazedsaint
Ho anche usato questo approccio, sfortunatamente perde memoria. Nella mia esperienza rimarrà un riferimento a qualsiasi elemento con cui lo si usi, che a sua volta rimarrà attaccato ad altri oggetti.Il colpevole sembra essere il callback che manterrà un riferimento al tuo punto di vista per la vita della tua applicazione. –