使用WPF附加属性来布局LOB表单

时间:2012-04-22 18:52:37

标签: wpf xaml attached-properties lob

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

2 个答案:

答案 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上的属性生成正确的输入字段类型。