时间:2024-11-23 00:54
人气:
作者:admin
使用C#开发过Windows Forms的都知道,在Windows Forms程序中,有一个PropertyGrid控件,可以用于显示对象的属性,在WPF中并没有默认提供此功能的控件,今天以一个简单的小例子,简述在WPF中借助WinForm的PropertyGrid实现属性列表功能,仅供学习分享使用,如有不足之处,还请指正。
PropertyGrid最常用属性,如下所示:
除了上述两个最常用属性,PropertyGrid还有其他属性,如下所示:
PropertyGrid支持的对象属性注解,如下所示:
通过上述注解,可以显示属性在PropertyGrid中的说明或者其他内容。
PropertyGrid控件目前支持.NET Framework和Windows Desktop版本,如下所示:

首先检查项目中是否引用【Microsoft.WindowsDesktop.App】框架,在此框架中,会包含【System.Windows.Forms】,若没有,需要手动添加,如下图所示:

在项目中需要添加PropertyGrid的页面,添加System.Windows.Forms命名空间,如下所示:
<Window x:Class="HelloWorld.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:HelloWorld"
xmlns:winfm="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
</Window>
由于PropertyGrid是Winodws Forms中的控件,并不能在WPF中直接使用,需要托管到WindowsFormsHost中才能正确显示,如下所示:
<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>
通过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功能》的全部内容,旨在抛砖引玉,一起学习,共同进步。
作者:老码识途
出处:http://www.cnblogs.com/hsiang/
本文版权归作者和博客园共有,写文不易,支持原创,欢迎转载【点赞】,转载请保留此段声明,且在文章页面明显位置给出原文连接,谢谢。
关注个人公众号,定时同步更新技术及职场文章