我在我的应用程序中编写了大量数据输入类型表单,我得出的结论是,我需要让它更容易一些。在做了一些阅读后,似乎可以使用子类ItemsControl来表示形式。
我已经完成了这个,现在有类似
的东西<MySubClassedForm></MySubClassedForm>
我现在要做的是设置一个附加属性说“LabelText”,以便它可以在任何控件内部使用。
举个例子,
<MySubClassedForm>
<TextBox MySubClassedForm.LabelText="Surname" />
<Image MySubClassedForm.LabelText="LabelText" />
</MySubClassedForm>
附属物定义: -
public static DependencyProperty LabelTextProperty = DependencyProperty.RegisterAttached("LabelText", typeof(string), typeof(MySubclassedForm),
new UIPropertyMetadata(string.Empty));
public string LabelText
{
get { return (string)GetValue(LabelTextProperty); }
set { SetValue(LabelTextProperty, value); }
}
我首先将附加属性放在MySubClassedForm上,然后收到以下错误: - 附加属性'MySubClassedForm.LabelText'未在'TextBox'或其基类之一上定义。
请您告诉我我做错了什么以及我需要做些什么才能使这项工作?
谢谢Alex
答案 0 :(得分:1)
您需要定义静态getter和setter方法:
public static readonly DependencyProperty LabelTextProperty =
DependencyProperty.RegisterAttached(
"LabelText", typeof(string), typeof(MySubclassedForm),
new UIPropertyMetadata(string.Empty));
public static string GetLabelText(DependencyObject obj)
{
return (string)obj.GetValue(LabelTextProperty);
}
public static void SetLabelText(DependencyObject obj, string value)
{
obj.SetValue(LabelTextProperty, value);
}
在Custom Attached Properties上获取更多信息。
答案 1 :(得分:0)
你应该看看magellan 它有WPF表单引擎和优秀的MVC框架。两者都可以在没有另一个的情况下使用。
它可以让你做到
<Form>
<Field For="{Binding Path=Server.Server}" />
<Field For="{Binding Path=Server.CachedExchangeMode}" />
<Field For="{Binding Path=Server.Username}" />
<Field For="{Binding Path=Server.SecurityMode}" />
</Form>
将自动为viewmodel上的属性生成正确的输入字段类型。