你如何从xaml传递参数?

Ikk*_*kky 30 c# wpf xaml

我创建了自己的UserControl"ClockControl",我通过主窗口的XAML初始化.

唯一的问题是我必须将一个参数传递给时钟控件的构造函数,我不知道我该如何做到这一点.

如果我没有参数,这可以工作:

<myControl:ClockControl></myControl:ClockControl>
Run Code Online (Sandbox Code Playgroud)

但是我如何传递参数呢?

这是构造函数:

public ClockControl(String city)
    {
        InitializeComponent();
        this.initController();
        ......
        .....
    }
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Naw*_*waz 62

你的构造函数:

public ClockControl(String city)
{
    InitializeComponent();
    this.initController();
    //...
}
Run Code Online (Sandbox Code Playgroud)

首先,如果你想在ClockControlXAML中使用,那么你需要一个默认的构造函数,意味着一个不带任何参数的构造函数.所以上面的构造函数不会起作用.

我建议你定义一个名称属性City,最好是依赖属性,然后从XAML中使用它.像这样的东西:

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();
        }
        //..........
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在XAML中写这个:

<myControl:ClockControl City="Hyderabad" />
Run Code Online (Sandbox Code Playgroud)

既然City是一个依赖属性,这意味着你甚至可以Binding这样做:

<myControl:ClockControl City="{Binding Location}" />
Run Code Online (Sandbox Code Playgroud)

希望,这解决了你的问题!