2010-02-01 4 views
1

Est-il possible d'introduire des attributs 'personnalisés' dans différents éléments de l'interface utilisateur dans XAML? Aussi pour les lire plus tard comme nous ajoutons des attributs pour les contrôles serveur dans ASP.NET?Comment ajouter des attributs XAML Silverlight personnalisés?

J'ai l'intention de lire des attributs spécifiques et de les utiliser ensemble.

Répondre

3

On dirait que vous essayez de trouver Attached Properties.

Une propriété attachée vous permet d'ajouter dans une propriété, définissable en Xaml, qui peut être "attachée" à n'importe quel élément. Vous puis retrieve them in code comme toute autre propriété de dépendance.

+0

Reed, Merci pour la réponse. Bon à savoir c'était dans le cadre. Marquer votre réponse comme 'Correct' – kanchirk

2

La façon dont j'ai accompli cela en créant une nouvelle classe qui hérite du contrôle de base. Par exemple, j'ai une classe appelée WebTextBox qui hérite TextBox. Et à l'intérieur de WebTextBox sont des propriétés et des événements personnalisés. En faisant cela, vous héritez de tous les comportements du contrôle TextBox. Mais vous pouvez être créatif ici si vous choisissez, même en modifiant le comportement en remplaçant les événements et autres. Quoi qu'il en soit, après avoir créé la classe, vous devrez ajouter l'espace de noms pour le projet au code XAML. Quelque chose comme ceci:

xmlns:me="clr-namespace:YourNamespace;assembly=YourAssembly" 

Et vous pouvez ajouter un WebTextBox (ou ce que vous appelez) comme ceci:

<me:WebTextBox CustomAttribute="cool stuff" /> 
+0

Steve, Effectivement une bonne idée. Je l'aurais utilisé sinon pour les propriétés attachées. Merci de répondre. – kanchirk

3

Voici l'approche que j'ai tendance à prendre avec ceci.

Créer un nouveau fichier de classe appelée Meta: -

namespace SilverlightApplication1 
{ 
    public static class Meta 
    { 
    #region SomeValue 
    public static string GetSomeValue(DependencyObject obj) 
    { 
     return (string)obj.GetValue(SomeValueProperty); 
    } 
    public static void SetSomeValue(DependencyObject obj, string value) 
    { 
     obj.SetValue(SomeValueProperty, value); 
    } 

    public static readonly DependencyProperty SomeValueProperty = 
     DependencyProperty.RegisterAttached("SomeValue", typeof(string), typeof(Meta), 
     new PropertyMetadata(null)); 
    #end region 

    #region SomeOtherValue 
    // Boilerplate code from above. 
    #end region 
    } 
} 

Une valeur peut maintenant être fixé en XAML comme ceci: -

<TextBox x:Name="txt" local:Meta.SomeValue="Hello, World!" /> 

À un moment donné dans le code cette valeur peut être récupérée avec : -

string value = Meta.GetSomeValue(txt); 

Notez que vous ne devez pas tenir à String que le type de la propriété y Vous pouvez pratiquement utiliser n'importe quel type avec la limitation que si vous pouvez l'attacher en XAML, le type doit être compatible avec la façon dont XAML construit des objets (par exemple nécessite un constructeur par défaut).

+0

Anthony, Merci pour la réponse. J'ai eu un aperçu frais des propriétés attachées 'Custom'. – kanchirk

Questions connexes