我创建了自己的UserControl“ClockControl”,我通过主窗口的XAML初始化。
唯一的问题是我必须将一个参数传递给时钟控件的构造函数,而且我不知道我该如何做到这一点。
如果我没有参数,这是有效的:
<myControl:ClockControl></myControl:ClockControl>
但是如何传递参数呢?
这是构造函数:
public ClockControl(String city)
{
InitializeComponent();
this.initController();
......
.....
}
提前致谢。
答案 0 :(得分:60)
你的构造函数:
public ClockControl(String city)
{
InitializeComponent();
this.initController();
//...
}
首先,如果你想使用XAML中的ClockControl
,那么你需要一个默认的构造函数,意味着一个不带任何参数的构造函数。所以上面的构造函数不会起作用。
我建议你定义一个名为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();
}
//..........
}
然后你可以在XAML中写这个:
<myControl:ClockControl City="Hyderabad" />
由于City
是一个依赖属性,这意味着你甚至可以这样做Binding
:
<myControl:ClockControl City="{Binding Location}" />
希望,这解决了你的问题!
答案 1 :(得分:4)
这是通过使用DependencyProperty
来完成的,但不是通过构造函数。只需向控件本身添加属性并从代码隐藏中使用它们即可。
请阅读以下有关DependencyProperty的内容:
作为一个视觉说明,这将允许您做的是以下内容,然后在代码隐藏中使用它:
<myControl:ClockControl City="New York"></myControl:ClockControl>
答案 2 :(得分:1)
x:Arguments directive就是你所需要的。
答案 3 :(得分:0)
可以通过简单地绑定控件的Tag属性来简化这一过程。快速而肮脏,也许并不过分优雅,但节省了添加其他财产的时间。