由於wpf中沒有提供propertygrid控制項,有些業務需要此類的控制項。這篇文章介紹在wpf中實現propertygrid的三種方式,三種方式都是俺平時使用時總結出來的。
第一種方式:使用windowsform的propertygrid控制項。
用過wpf的童鞋都曉得,可以通過windowsformshost將windowsform的控制項宿主到wpf中使用。很簡單,分為簡單的3步。
第一步:引用dll:在wpf應用程式中引入system.windows.forms.dll。
第二步:引用命名空間:在窗體的.cs**中引用此命名空間:using system.windows.forms;在xaml中引用此命名空間**如下:
xmlns:my="clr-namespace:system.windows.forms;assembly=system.windows.forms"
第三步:通過windowsformshost使用propertygrid控制項。
<
windowsformshost
height
="287"
horizontalalignment
="left"
margin
="18,12,0,0"
name
="windowsformshost1"
verticalalignment
="top"
width
="200"
>
<
my:propertygrid
x:name
="propertygrid1"
>
my:propertygrid
>
windowsformshost
>
看下效果button的屬性:
將button的背景色設定為紅色:
使用方式很簡單。由於它是wpf控制項,所以不需要使用windowsformshost。
<
window
x:class
xmlns
=""xmlns:x
=""xmlns:wpg
="clr-namespace:wpg;assembly=wpg"
title
="window1"
height
="300"
width
="300"
>
<
dockpanel
verticalalignment
="stretch"
>
<
button
dockpanel.dock
="top"
x:name
="btn"
>
button for test
button
>
<
wpg:propertygrid
dockpanel.dock
="top"
instance=""
verticalalignment
="stretch"
isenabled
="true"
>
wpg:propertygrid
>
dockpanel
>
window
>
把button的背景色設定為紅色:
第三種方式:使用wf4.0設計器裡面的屬性框控制項。wf4.0的流程設計器有乙個這樣的propertygrid控制項。我們利用它來實現自己的propertygrid控制項。這也是本文重點介紹的方式。參考:native wpf 4 propertygrid。分五個步驟去實現。
1、自定義乙個使用者控制項,這個控制項繼承grid類。grid將包含真正的介面元素。
2、用workflow foundation的
workflowdesigner乙個物件作為這個控制項的私有成員。
3、對於需要設計的物件,在grid中新增乙個propertyinspectorview物件的子元素。對外它是乙個grid,其實它的型別是properyinspector。
4、通過反射獲取和使用propertyinspector的一些方法。
5、實現乙個selectedobject屬性,標準的propertygrid都有它。用來處理propertyinspector選擇物件的改變。
**如下:
using
system.activities.presentation;
using
system.activities.presentation.model;
using
system.activities.presentation.view;
using
system.reflection;
using
system.windows.controls;
namespace
system.windows.control
set);
this
.selectiontypelabel.text
=value.gettype().name;
}else
);this
.selectiontypelabel.text
=string
.empty;}}
}///
///xaml information with propertygrid's font and color information
///
///documentation for workflowdesigner.propertyinspectorfontandcolordata
public
string
fontandcolordata
}#endregion
//////
default constructor, creates a hidden designer view and a property inspector
///
public
wpfpropertygrid()
//////
updates the propertygrid's properties
///
public
void
refreshpropertylist());}
}}
效果:
總結:
本文提供了三種方式去在wpf中實現propertygrid。
MVVM模式和在WPF中的實現
我大概是從2102年底開始接觸wpf,之前一直用winform。剛開始看了下感覺跟winform區別不大,控制項可以拖進去,選中了控制項屬性面板可以設定屬性 事件面板可以監聽事件,後台 處理事件,一切都那麼的熟悉。xaml布局也跟android布局很像,所以沒學習就直接開始了,覺得摸索摸索基本就差不...
wpf中xps文件合併功能實現
原文 wpf中xps文件合併功能實現 如果要是直接先開啟乙個xps檔案,用新檔案去寫fixeddocument,或者documentsequence 新增到新的檔案中的話,會報錯,提示,system.windows.xps.xpspackagingexception 型別的未經處理的異常在 reac...
在WPF中快速實現鍵盤鉤子
原文 在wpf中快速實現鍵盤鉤子 大部分的時候,當我們需要鍵盤事件的時候,可以通過在主視窗註冊keybinding來實現,不過,有的時候我們需要的是全域性鍵盤事件,想在任何乙個地方都能使用,最開始的時候我是通過鍵盤鉤子來實現的,不過鍵盤鉤子這種dll呼叫的方式怎麼都看著不大爽,這裡介紹一種通過eve...