ToB企服应用市场:ToB评测及商务社交产业平台
标题:
在WPF程序中实现PropertyGrid功能
[打印本页]
作者:
曹旭辉
时间:
2024-11-22 23:51
标题:
在WPF程序中实现PropertyGrid功能
使用C#开发过Windows Forms的都知道,在Windows Forms程序中,有一个PropertyGrid控件,可以用于显示对象的属性,在WPF中并没有默认提供此功能的控件,本日以一个简单的小例子,简述在WPF中借助WinForm的PropertyGrid实现属性列表功能,仅供学习分享使用,如有不足之处,还请指正。
涉及知识点
PropertyGrid 是.NET中属性浏览器的核心,PropertyGrid控件显示任何对象或范例的属性,并检索项的属性。PropertyGrid一般用在Windows Forms程序中,在WPF程序中,可以通过自定义控件实现,也可以借助WindowsFormsHost控件,将Windows Forms中的控件,宿主到WPF程序中。
WindowsFormsHost,一个WPF控件,答应答应在 WPF 程序上托管 Windows Forms控件。反过来,若要在 Windows 窗体控件或窗体中承载 WPF 元素,请使用 控件 ElementHost 。
PropertyGrid简介
PropertyGrid最常用属性,如下所示:
SelectedObject,设置PropertyGrid控件选择的对象,赋值后,控件将显示对象所有public修饰的属性。
SelectedObjects,设置PropertyGrid控件显示的对象列表,为数组范例。赋值后,将显示所有对象公共的public修饰的属性。
除了上述两个最常用属性,PropertyGrid还有其他属性,如下所示:
BackColor 更改其配景色。
HelpBackColor 更改助窗口配景色。
HelpForeColor 更改助窗口字体颜色。
HelpVisible 显示隐蔽帮助窗口。
ToolbarVisible 显示隐蔽工具栏。
LargeButtons 显示大型工具栏按钮。
PropertySort 按字母序次对属性举行排序。
BackColor 更改拆分器颜色。
LineColor 更改网格线和边框。
PropertyGrid支持的对象属性注解,如下所示:
DescriptionAttribute - 设置属性在属性下方的阐明帮助窗格中显示的属性的文本。 这是为具有焦点的活动属性提供帮助文本的有效方法。 将此属性应用于 MaxRepeatRate 该属性。
CategoryAttribute 设置属性在网格中所属的类别。 当需要按类别名称分组的属性时,这非常有效。 如果属性未指定类别,则会将其分配给 Misc 类别。 将此属性应用于所有属性。
BrowsableAttribute – 指示属性是否显示在网格中。 如果要从网格中隐蔽属性,这非常有效。 默认情况下,公共属性始终显示在网格中。 将此属性应用于 SettingsChanged 该属性。
ReadOnlyAttribute – 指示属性是否为只读。 如果要使属性在网格中不可编辑,这非常有效。 默认情况下,具有 get 和 set 访问器函数的公共属性在网格中可编辑。 将此属性应用于 AppVersion 该属性。
DefaultValueAttribute – 标识属性的默认值。 如果想要为属性提供默认值,然后确定该属性的值是否差别于默认值,则这非常有效。 将此属性应用于所有属性。
DefaultPropertyAttribute – 标识类的默认属性。 类的默认属性在网格中选择类时起首获取焦点。 将此属性应用于 AppSettings 类。
DisplayNameAttribute - 实际显示的名称
通过上述注解,可以显示属性在PropertyGrid中的阐明或者其他内容。
PropertyGrid控件目前支持.NET Framework和Windows Desktop版本,如下所示:
开发步骤
1. 查抄类库
起首查抄项目中是否引用【Microsoft.WindowsDesktop.App】框架,在此框架中,会包含【System.Windows.Forms】,若没有,需要手动添加,如下图所示:
2. 引用定名空间
在项目中需要添加PropertyGrid的页面,添加System.Windows.Forms定名空间,如下所示:
[/code][size=5]3. 添加PropertyGrid控件[/size]
由于PropertyGrid是Winodws Forms中的控件,并不能在WPF中直接使用,需要托管到WindowsFormsHost中才气正确显示,如下所示:
[code]<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button x:Name="btnHelloWorld" Content="Click Say Hello World"
Width="150" Height="30" Click="btnHelloWorld_Click"></Button>
<WindowsFormsHost Grid.Column="1" Margin="18,12,0,0" Name="windowsFormsHost1" VerticalAlignment="Top">
<winfm:PropertyGrid x:Name="propertyGrid"></winfm:PropertyGrid>
</WindowsFormsHost>
</Grid>
复制代码
4. 设置对象
通过SelectedObject属性为PropertyGrid赋值,由于PropertyGrid属性并不是WPF中的依赖对象,所以不能举行绑定,但可以通过后台C#代码举行赋值。如下所示:
定义测试类Person
public class Person
{
[Category("Person")]
[DisplayName("标识")]
[Description("唯一标识")]
public int Id { get; set; }
[Category("Person")]
[DisplayName("名称")]
[Description("名称")]
public string Name { get; set; }
[Category("Person")]
public string Title { get; set; }
[Category("Person")]
public string Description { get; set; }
[Category("Person")]
public int Age { get; set; }
}
复制代码
声明Person对象并赋值给PropertyGrid,如下所示:
public MainWindow()
{
InitializeComponent();
var p = new Person
{
Id = 1,
Name = "老码识途",
Age = 20,
Description = "这是一个人",
Title = "老码识途作者"
};
this.propertyGrid.SelectedObject = p;
}
复制代码
实例演示
通过上述步骤,就可以实现PropertyGrid属性框的功能,本例将Person的作为要显示属性的对象赋值给PropertyGrid,如下所示:
注意,如果没有为属性设置Category,则默以为Misc。
以上就是《在WPF程序中实现PropertyGrid功能》的全部内容,旨在抛砖引玉,一起学习,共同进步。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4