2009-11-12 67 views

回答

5

主要的限制是,你失去了WPF的所有強大功能:Data bindingControlTemplatesDataTemplates,無限大小,縮放/旋轉,OpacityAttached Properties,只是僅舉幾例。這是很多放棄!您必須使用舊的繁瑣且容易出錯的WinForms技術對這些控件進行編程,並重新處理自己在多年前釋放的所有限制。

的DataGridView

NET Framework 3.5 SP1中有一個DataGrid可以做的工作,有幾個第三方控件的這個如Xceed之一。使用基於WPF的網格允許在網格內完成數據綁定,模板和樣式,如果您使用WinForms的DataGridView,則這是不可能的。

的PropertyGrid

原因WPF不拿出一個PropertyGrid的是,它是那麼容易使用的是什麼WPF已經給你重新創建:一個簡單的列表框會做,妥善風格,只用幾行的代碼隱藏。

使用WPF PropertyGrid實現的美妙之處在於,您可以使用模板來呈現您正在編輯的屬性,最重要的是,您可以添加新的屬性編輯器,只需在XAML中使用幾個綁定來表達它們即可。例如,我們的某個屬性網格中的某些屬性使用滑塊設置,並且只有大約五行XAML才能實現。

這裏是說明背後WPF中實現PropertyGrid中的關鍵概念的一些代碼:

public class PropertyGrid 
{ 
    ... 
    public static readonly DependencyProperty SelectedObjectProperty = ... 
    { 
    PropertyChangedCallback = (obj, e) => 
    { 
     PropertyItems = 
     from pi in SelectedObject.GetType().GetProperties() 
     select new PropertyGridItem { Object = SelectedObject, PropertyInfo = pi }; 
    } 
    } 
} 

public class PropertyInfo 
{ 
    public object Object; 
    public PropertyInfo PropertyInfo; 
    public object Value 
    { 
    get { return PropertyInfo.GetValue(Object); } 
    set { PropertyInfo.SetValue(Object, value); } 
    } 
    public string Category 
    { 
    get 
    { 
     return (
     from attrib in PropertyInfo.GetCustomAttributes().OfType<CategoryAttribute>() 
     select attrib.Name 
    ).FirstOrDefault(); 
    } 
    } 
} 

有了這一點,是非常快速和容易複製的PropertyGrid整體外觀和手感與XAML的幾行:只需使用按類別分組的ListBox以及包含綁定到屬性名稱的固定寬度TextBlockDockPanel和由ContentPresenter打印屬性編輯器的ItemTemplate

+0

雖然我勾畫出了我們使用的本土PropertyGrid,但您也可能想看看Franci Penov提到的CodePlex上的一個。 – 2009-11-12 08:51:04

2

首先,有第三方property gridsdatagrids爲WPF,而這些通常將支持WPF的額外的造型能力和適應更加地道與WPF應用程序。所以你不需要退回到WinForms,並且可能不應該除非第三方或工具包控件真的不是一個選項。

如果您必須退回到WinForms,則需要注意的主要限制是「空域規則」:您不能讓WinForms和WPF控件相互重疊。此外,當然WinForms控件不能參與WPF數據綁定,並且必須使用old-skool過程代碼來解決,儘管您可以將它們封裝在用戶控件中以解決此問題。另外,如果你正在嘗試做一些花哨的視覺效果,那麼它們可能不適合WinForms控件:如果你要在WinForms控件附近進行變換或者動畫,空域規則可能會讓你難以接受。但對於視覺上簡單的應用,它們應該可以正常工作

相關問題