web-dev-qa-db-fra.com

Comment passez-vous les paramètres de xaml?

J'ai créé mon propre UserControl "ClockControl", que j'initialise via le XAML de la fenêtre principale.

Le seul problème est que je dois passer un paramètre au constructeur du contrôle d’horloge, et je ne sais pas du tout comment je peux le faire.

Cela fonctionne si je n'ai pas de paramètres:

<myControl:ClockControl></myControl:ClockControl>

Mais comment puis-je passer un paramètre en faisant cela?

Voici le constructeur:

public ClockControl(String city)
    {
        InitializeComponent();
        this.initController();
        ......
        .....
    }

Merci d'avance.

30
Ikky

Votre constructeur:

public ClockControl(String city)
{
    InitializeComponent();
    this.initController();
    //...
}

Tout d’abord, si vous voulez utiliser ClockControl à partir de XAML, vous avez besoin d’un constructeur par défaut, c’est-à-dire un constructeur qui ne prend aucun paramètre. Donc, le constructeur ci-dessus ne va pas fonctionner.

Je vous suggérerais de définir une propriété avec le nom City, de préférence une propriété de dépendance, puis de l’utiliser à partir de XAML. Quelque chose comme ça:

public class ClockControl: UserControl
    {
        public static readonly DependencyProperty CityProperty = DependencyProperty.Register
            (
                 "City", 
                 typeof(string), 
                 typeof(ClockControl), 
                 new PropertyMetadata(string.Empty)
            );

        public string City
        {
            get { return (string)GetValue(CityProperty); }
            set { SetValue(CityProperty, value); }
        }

        public ClockControl()
        {
            InitializeComponent();
        }
        //..........
}

Ensuite, vous pouvez écrire ceci en XAML:

<myControl:ClockControl City="Hyderabad" />

Puisque City est une propriété de dépendance, cela signifie que vous pouvez même faire Binding comme ceci:

<myControl:ClockControl City="{Binding Location}" />

Espérons que cela résout votre problème!

59
Nawaz

Ceci est fait avec l'utilisation de DependencyProperty, mais pas via le constructeur. Simplement en ajoutant des propriétés au contrôle lui-même et en les utilisant à partir du code-behind.

Prenez connaissance des éléments suivants concernant DependencyProperty's:

Comme note visuelle, ceci vous permettra de faire ce qui suit, puis de l’utiliser dans le code-behind:

<myControl:ClockControl City="New York"></myControl:ClockControl>
4
Kyle Rozendo

x: La directive Arguments serait ce dont vous avez besoin.

1
Yang C

Cela pourrait simplifier cela en liant simplement la propriété Tag du contrôle. Rapide et sale, et peut-être pas trop élégant, mais sauve des temps en ajoutant une autre propriété.

0
Oyiwai