2009-12-24 5 views
1

Nous chargeons du xaml pour un élément lors de l'exécution (XamlReader.Load) à des fins de prévisualisation. Il en faut moins pour dire que les propriétés/liaisons ne sont pas connues car elles peuvent varier entre les éléments/contrôles que nous chargeons. Comme le contexte du modèle d'affichage de l'exécution n'est pas disponible lorsque nous chargeons le contrôle pour l'aperçu - après le chargement de l'élément, l'idée est de saisir les informations de liaison, de créer un type avec ces propriétés lors de l'exécution. en tant que contexte de données du contrôle chargé.Silverlight - Saisir toutes les informations de liaison des éléments dans un stree visuel donné?

Nous allons utiliser AssemblyBuilder/ModuleBuilder/TypeBuilder pour générer un type lors de l'exécution. Cela dit, nous devons parcourir l'arbre visuel pour identifier les liaisons impliquées, pour créer une liste de chemins de liaison. De toute évidence, une façon est d'utiliser regex pour analyser le xaml directement et construire cette liste .. Vous voulez juste connaître un moyen existe afin que je puisse saisir les liaisons et les chemins connexes de l'arbre visuel lui-même?

Merci

+0

Je vois souvent l'étiquette wpf incluse dans une question silverlight, y a-t-il vraiment un composant wpf à cette question? – AnthonyWJones

Répondre

0

Pourquoi ne pas simplement marcher l'arbre visuel Silverlight et pour chaque appel élément GetBindingExpression() pour tout cela est SDPE?

+0

Un dev "simple" est un autre dev "yikes!". – AnthonyWJones

+0

Parfait, merci – amazedsaint

0

Vous ne pouvez pas facilement énumérer les liaisons elles-mêmes à partir de l'arborescence visuelle. Le showstopper principal est que le FrameworkElement ne fournit pas un moyen d'énumérer les liaisons qui ont été appliquées à l'aide de la méthode SetBinding. Afin de découvrir l'ensemble de liaisons sur un FrameworkElement, vous devez découvrir l'ensemble des DependencyProperties possibles qui ont ou peuvent ne pas avoir été définies, puis essayer de les récupérer avec GetBindingExpression. Pour découvrir l'ensemble de DependencyProperties nécessiterait un code de réflexion sur le type réel de l'objet FrameworkElement.

Une alternative plus probable serait de charger le XAML dans un XDocument, vous pourriez alors utiliser un peu de LINQ pour découvrir tous les attributs qui commencent par "{Binding". Mais oui, ce serait alors un cas de RegEx pour analyser la valeur de l'attribut (sauf si vous voulez faire quelque chose de vraiment fou que je ne mentionnerai même pas).

Questions connexes