我想在初始化新的UserControl
:
public partial class MyUserControl : UserControl
{
public MyUserControl(int id)
{
InitializeComponent();
//.. do something with id
}
// ...
}
是否可以从xaml将值传递给构造函数(在我的情况下为id
)?
<CustomControls:MyUserControl />
(是的,我可以定义依赖属性或在代码中进行控制,但这不会有帮助)
答案 0 :(得分:0)
假设我们有一个usercontrol,它在初始化时为文本框赋值:
public ControlWithP(int i)
{
InitializeComponent();
tb.Text = i.ToString();
}
将此控件添加到页面:
public SamplePage()
{
InitializeComponent();
ControlWithP cwp = new ControlWithP(1);
this.sp.Children.Add(cwp);
}
其中sp是StackPanel控件。将用户控件添加到Grid也是一样。
查看结果。
这是你想要的吗?
答案 1 :(得分:0)
从XAML-2009开始,您可以使用x:Arguments Directive 执行此操作,但 Windows Phone正在使用2006(暂时),因此无法实现。
因此,要使用XAML中的控件,您需要一个默认的构造函数(无参数)。
我认为你可以使用一些解决方法,使用特别设计的属性:
public partial class MyControl : UserControl
{
private string myValue = "Default";
public string MyValue
{
get { return myValue; }
set
{
myValue = value;
// alternatively you can add some code here which
// will be invoked after control is created
}
}
public MyControl()
{
InitializeComponent();
}
}
然后在XAML中:
<local:MyControl MyValue="From xaml"/>
在创建控件之后,设置属性并调用其代码 - 因此它也可以用作创建期间运行的代码的附加部分。
如果您想将数据传递给您的控件,更好的选择是DependencyProperty - example here。