8
votes

Définition de la valeur de la propriété XAML au contrôle de l'utilisateur

J'ai un contrôle de l'utilisateur dans WPF que je souhaite que le texte de l'une des étiquettes est lus à partir du XAML où il est utilisé. Par conséquent ..

My User Control: P>

 <mycontorls:muc TestName="This is a test" />


1 commentaires

Tout ce que vous voulez, c'est une propriété de dépendance nommée TestName qui doit être créée dans le code de l'UerControl, comme décrit comme décrit par Alvinfromdiaspar. Ensuite, vous pouvez lier le contenu de l'étiquette à la propriété TestName de l'Usercontrol à l'aide de l'élémentaireName (réponse de QuarterMeister) ou reliure de RelativeVource (réponse de Pavel Minaev).


4 Réponses :


5
votes

Si vous donnez un nom à la racine UserControl un nom, vous pouvez alors vous reporter à l'aide de l'élémentName: xxx

Vous pouvez également utiliser la syntaxe d'extension de balisage pour en faire un peu plus court: xxx

N'oubliez pas que votre commande sera créée avant que ses propriétés soient définies. Vous devez soit avoir besoin d'implémenter inotifyPropertychanged ou avoir TestName être une propriété de dépendance afin que la liaison soit réévaluée après la définition de la propriété.


0 commentaires

0
votes

{élément de reliureName = x} se lie à un élément avec nom x dans l'arborescence d'élément, il n'y a rien ici qui traite de la propriété TestName . Si vous souhaitez une propriété sur votre contrôle utilisateur, vous devez définir la propriété de la classe correspondant à ce contrôle de l'utilisateur (dans votre cas, il serait MUC ) et utilisez {reliure reliefource = {RelateSource FindCestor, ...}} Pour le référencer sur votre commande utilisateur (voir ici pour plus de détails), ou donnez-lui un nom afin que vous puissiez utiliser ellementname .


0 commentaires

4
votes

Je n'ai fait que cela avec Silverlight, mais je ne serais pas surpris si cela fonctionne exactement de la même manière!

// <summary>
// Xaml exposed TextExposedInXaml property.
// </summary>
public static readonly DependencyProperty TestNameProperty = DependencyProperty.Register("TestName", typeof(string), typeof(NameOfMyUserControl), new PropertyMetadata(string.empty));

// <summary>
 // Gets or sets the control's text
// </summary>
public string TextExposedInXaml
{
            get
            {
                return (string)GetValue(TestNameProperty );
            }

            set
            {
                SetValue(TestNameProperty , value);

                // set the value of the control's text here...!
            }
}


0 commentaires

8
votes

J'ai essayé les deux premières réponses et ce que j'avais travaillé dans le code mais pas sur XAML (ne vous permet pas de voir les modifications de la vue de conception lors de l'utilisation du contrôle).

Pour obtenir une propriété qui fonctionne comme une autre Native One, voici le processus complet: (L'échantillon ajoute une propriété de dépendance de type nullable à afficher dans la commande sous forme de texte ou par défaut si NULL) p>

  1. dans le fichier de code: p>

    1.a Définir une propriété de dépendance: p>

     < TextBlock Name="MyNumberTextBlock" Text="{Binding MyNumber, ElementName=RootElement}"/>
    
  2. dans le fichier XAML lie le texte de la commande TextBlock sur la propriété (non de la dépendance) pour obtenir la valeur par défaut de la propriété de dépendance au cas où il n'est pas défini par l'utilisateur du contrôle (en supposant que votre élément racine. de la commande utilisateur "racine"): p> li> ol>

    ce code: p> xxx pré> p>


0 commentaires