¿Cómo se pasan los parámetros de xaml?

Creé mi propio UserControl “ClockControl”, que inicializo a través del XAML de la ventana principal.

El único problema es que tengo que pasar un parámetro al constructor del control del reloj, y no tengo idea de cómo puedo hacerlo.

Esto funciona si no tengo parámetros:

 

Pero, ¿cómo puedo pasar un parámetro haciendo esto?

Aquí está el constructor:

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

Gracias por adelantado.

Tu constructor:

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

En primer lugar, si desea usar ClockControl desde XAML, necesita un constructor predeterminado, es decir, un constructor que no toma ningún parámetro. Entonces el constructor anterior no va a funcionar.

Le sugiero que defina una propiedad con el nombre City , preferiblemente propiedad de dependencia, y luego utilícela de XAML. Algo como esto:

 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(); } //.......... } 

Entonces puedes escribir esto en XAML:

  

Dado que City es una propiedad de dependencia, eso significa que incluso puedes Binding esta manera:

  

Espero, eso resuelve tu problema!

Esto se hace con el uso de DependencyProperty , pero no a través del constructor. Simplemente agregando propiedades al control y usándolas desde el código subyacente.

Lea lo siguiente con respecto a DependencyProperty’s:

  • Descripción general de las propiedades de dependencia
  • DependencyProperty Class MSDN
  • ¿Por qué las propiedades de dependencia?

Como nota visual, lo que esto le permitirá hacer es lo siguiente, y luego usarlo en el código subyacente:

  

x: directiva de argumentos sería lo que necesitas.

Podría simplificar esto simplemente vinculando la propiedad Tag del control. Rápido y sucio, y tal vez no excesivamente elegante, pero ahorra tiempo agregando otra propiedad.