Ho un controllo in WPF che ha un Uid univoco. Come posso recuperare l'oggetto dal suo Uid?Ottieni oggetto dal relativo Uid in WPF
risposta
Devi praticamente farlo con la forza bruta. Ecco un metodo di estensione di supporto è possibile utilizzare:
private static UIElement FindUid(this DependencyObject parent, string uid)
{
var count = VisualTreeHelper.GetChildrenCount(parent);
if (count == 0) return null;
for (int i = 0; i < count; i++)
{
var el = VisualTreeHelper.GetChild(parent, i) as UIElement;
if (el == null) continue;
if (el.Uid == uid) return el;
el = el.FindUid(uid);
if (el != null) return el;
}
return null;
}
Poi si può chiamare in questo modo:
var el = FindUid("someUid");
Non 'GetChild (genitore, N)' ha la complessità di O (N)? L'approccio foreach sembra più pulito (e più chiaro) per me. – AgentFire
questo è meglio.
public static UIElement FindUid(this DependencyObject parent, string uid) {
int count = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < count; i++) {
UIElement el = VisualTreeHelper.GetChild(parent, i) as UIElement;
if (el != null) {
if (el.Uid == uid) { return el; }
el = el.FindUid(uid);
}
}
return null;
}
Non può essere migliore se il tuo codice non funziona. La tua ricorsione è rotta. Il risultato di 'el.FindUid (uid)', se non nullo, deve essere restituito. –
public static UIElement GetByUid(DependencyObject rootElement, string uid)
{
foreach (UIElement element in LogicalTreeHelper.GetChildren(rootElement).OfType<UIElement>())
{
if (element.Uid == uid)
return element;
UIElement resultChildren = GetByUid(element, uid);
if (resultChildren != null)
return resultChildren;
}
return null;
}
Un problema che ho avuto con la risposta in alto è che non guarderà dentro controlli di contenuto (ad esempio i controlli di utente) per gli elementi all'interno del loro contenuto. Per cercare all'interno di questi ho esteso la funzione per esaminare la proprietà Content dei controlli compatibili.
public static UIElement FindUid(this DependencyObject parent, string uid)
{
var count = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < count; i++)
{
var el = VisualTreeHelper.GetChild(parent, i) as UIElement;
if (el == null) continue;
if (el.Uid == uid) return el;
el = el.FindUid(uid);
if (el != null) return el;
}
if (parent is ContentControl)
{
UIElement content = (parent as ContentControl).Content as UIElement;
if (content != null)
{
if (content.Uid == uid) return content;
var el = content.FindUid(uid);
if (el != null) return el;
}
}
return null;
}
- 1. Ottieni l'immagine dal percorso relativo
- 2. Come caricare dal percorso relativo nell'applicazione WPF?
- 3. OpenSSL Ottieni oggetto Nome alternativo dal certificato
- 4. Ottieni oggetto "Class" dal tipo generico T
- 5. Ottieni oggetto file dal file Ingresso
- 6. Ottiene automaticamente UID e GID dal nome utente in Unix?
- 7. URL assoluto dal percorso relativo
- 8. wpf - Ottieni valori dal file di configurazione app
- 9. Posizionatore di ornamenti relativo alle dimensioni del genitore in WPF
- 10. Ottieni la distanza dell'elemento relativo all'elemento principale
- 11. Ottieni oggetto CultureInfo dal nome del paese o dall'oggetto RegionInfo
- 12. WPF Ottieni finestra principale
- 13. Ottieni oggetto con id()?
- 14. Ottieni l'URL relativo dell'app da Request.Url.AbsolutePath
- 15. WPF Ottieni proprietario UserControl
- 16. RealUID, UID salvato, UID efficace. Cosa sta succedendo?
- 17. WPF - Ottieni dimensioni di UIElement in memoria?
- 18. carico Lua-files dal percorso relativo
- 19. ASP.NET - Ottieni l'identificativo principale/relativo (RID) per una DirectoryEntry/SID
- 20. Sicurezza Android Modifica UID
- 21. Get tt_content uid
- 22. Ottenere il percorso relativo dal percorso assoluto in PHP
- 23. Ottieni colonna per intestazione colonna in WPF DataGrid
- 24. Ottieni output in uscita dal processo
- 25. Come generare UID versione seriale in Intellij
- 26. Come chiudere l'applicazione WPF dal menu di scelta rapida?
- 27. Ottieni oggetto java.nio.file.Path da java.io.File
- 28. Ottieni nome dal verbo Wordnet
- 29. Ottieni disconnessione evento dal sistema
- 30. Ottieni l'input dell'utente dal discorso?
Prego elaborare. Qual è il tuo UID? Come è impostato? –
È una proprietà di dipendenza di qualsiasi controllo in wpf o silverlight .. sono riuscito a risolverlo, ma mi chiedevo se esistesse un metodo integrato. – jose