我有几个需要填写属性的类。例如:
class RecordType1
{
public DateTime Date { get; set; }
public string Name { get; set; }
public string Value { get; set;}
}
class RecordType2
{
public DateTime Date { get; set; }
public string Name { get; set; }
public string Location { get; set; }
public float Temperature { get; set; }
}
对于RecordType1,我想生成DatePicker
以填写日期,并生成两个TextBox
以填充Name
和Value
。同样,对于RecordType2,我想要DatePicker
和TextBox
Name,
位置, and
温度`。
我可以为每个类创建一个包含单独UserControl
的文件,该文件具有所需的TextBlocks和TextBoxes,但似乎可以有更好的方法来生成表单供用户填写。
这种事情有可能吗?
答案 0 :(得分:0)
在WinForms中执行此操作的快速方法是使用PropertyGrid控件。我不确定WPF中是否存在等效内容,但您可以host the PropertyGrid使用WindowsFormsHost
进行控制。
答案 1 :(得分:0)
可以通过反射来做到这一点。首先得到类型:
Type typeinfo = typeof(RecordType1);
然后您可以遍历属性。
如果您不想自己完成所有这些操作,可以使用超级属性。
<UserControl x:Class="Interstone.Bestelbonnen.Views.DrawingPropertiesControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="clr-namespace:Interstone.Bestelbonnen.ViewModels"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<xctk:PropertyGrid SelectedObject="{Binding}" AutoGenerateProperties="False" IsCategorized="False">
</xctk:PropertyGrid>
有关propertygrid的更多信息: http://wpftoolkit.codeplex.com/wikipage?title=PropertyGrid
我没有详细说明反射部分,我不确定你想去哪个方向。
答案 2 :(得分:0)
即使在运行时,它肯定可以可能来做你要求的事情。您可以使用反射来获取各种字段,然后生成控件以匹配字段类型。
现在,这不是一个非常实用的方法,特别是考虑到这种生成的表单布局可能很糟糕的可能性很高。通常的方法是手动创建表单/用户控件。
由于您使用的是WPF,因此您可以使用数据模板而不是用户控件,因为您可以在ItemsControl
和ContentControl
中轻松使用它们