0

我在我的应用程序中编写了很多数据输入类型的表单,我得出的结论是我需要让它变得更容易一些。在做了一些阅读之后,似乎可以使用子类 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”或其基类之一上定义。

请你能告诉我我做错了什么以及我需要做些什么来完成这项工作吗?

谢谢亚历克斯

4

2 回答 2

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); 
} 

在此处获取有关自定义附加属性的更多信息。

于 2012-04-22T20:01:14.920 回答
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>

这将为您的视图模型上的属性自动生成正确的输入字段类型。

于 2012-04-22T19:58:53.140 回答