2009-11-12 11 views
5

WPFで新しいアプリケーションを開始します。 WPFの新しいユーザーインターフェイスには、DataGridViewコントロールとPropertyGridコントロールが必要です。しかし、WPFにはこれらの2つのコントロールが存在しないと思われ、WindowsFormsHostを使用してこれら2つのコントロールをホストしたいと考えています。WPFで.NET 2.0(Windowsフォーム)コントロールを使用する際の制限はありますか?

しかし、私がそれを行うと、誰かがこのアプローチを見て制限がありますか?まず第一に

答えて

5

主な制限は、すべての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を使用してください。

+0

私が使っている自家製のPropertyGridを描いたのですが、Francis Penovが言及しているCodePlexのものもあります。 –

2

は、第三者property gridsとWPFのためのdatagridsがあり、これらは通常、WPFの追加のスタイリング機能をサポートし、WPFアプリケーションでより多くの慣用的に適合します。したがって、WinFormsに戻る必要はありません。サードパーティやツールキットのコントロールが実際にはオプションでない限り、おそらくそうではありません。

WinFormsに戻す必要がある場合、気づくべき主な制限は「空間領域ルール」です。WinFormsとWPFコントロールを重複させることはできません。もちろん、WinFormsコントロールはWPFデータバインディングに参加することができず、古いスキルの手続き型コードを使用して処理する必要がありますが、ユーザーコントロールにカプセル化してこの問題を回避することができます。また、WinFormsコントロールでうまく動作しないような視覚的なエフェクトを作成しようとしている場合、WinFormsコントロールの近くで変換やアニメーションを実行していると、空白のルールが邪魔になる可能性があります。しかし、視覚的にシンプルなアプリケーションのためには大丈夫です。

1

WPF Toolkitには、Datagridコントロールがあります。また、CodePlexには第三者PropertyGrid controlもあります(非常に許諾のあるMS-PLライセンスのもとで)。ちょうど少数を示すために、Data bindingControlTemplatesDataTemplates、無限サイズ、ズームし/回転、OpacityAttached Properties

関連する問題