主な制限は、すべてのWPFの強力な機能を失うということです。それはあきらめることがたくさんある!面倒な、エラーが起こりやすいWinFormsのテクニックを使ってこれらのコントロールをプログラミングし、数年前にあなたが解放したすべての制限をもう一度やり直す必要があります。
のDataGridView
NET Framework 3.5のSP1には、仕事をすることDataGrid
を持っており、サードパーティ製のコントロールのいくつかは、そのようなエクシードからの一つとして、このためにあります。 WPFベースのグリッドを使用すると、グリッド内の完全なデータバインディング、テンプレート化、スタイリングが可能になります。これは、WinFormsのDataGridViewを使用すると不可能になります。
PropertyGridの
WPFはPropertyGrid
が付属していない理由は、WPFは、すでにあなたを与えるものを使用して再作成することは簡単なことである:簡単なリストボックスが行います、適切なスタイル、わずか数行でコードビハインドの
WPF PropertyGrid
の実装では、テンプレートを使用して編集中のプロパティを表示でき、いくつかのバインディングでXAMLで表現するだけで新しいプロパティエディタを追加できます。たとえば、プロパティグリッドのプロパティの中にはスライダが設定されているものがありますが、これを実現するのはXAMLの約5行だけでした。ここで
は、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();
}
}
}
XAMLの数行でPropertyGrid
の全体のルックアンドフィールを複製することは非常に迅速かつ簡単です。カテゴリ別にグループ化したListBoxと、プロパティ名にバインドされた固定幅TextBlock
とプロパティエディタを印刷するContentPresenter
を含むDockPanel
からなるItemTemplate
を使用してください。
私が使っている自家製のPropertyGridを描いたのですが、Francis Penovが言及しているCodePlexのものもあります。 –