6

基本的に最新の優れた GUI を備えたデスクトップ CAD アプリケーションを作成する必要があります。リッチなユーザー インターフェイスを持つことができるように、WPF アプリケーションを作成することを考えています。WPF で適切に設計されたデスクトップ アプリケーション GUI フレームワークを教えてください。このビデオhttp://channel9.msdn.com/posts/Psychlist1972/Pete-at-PDC09-WPF-3d-Awesomeness-with-Tor-and-Robby/でクールな GUI を見つけまし たが、彼らが使用したコントロールについてはわかりません彼らのアプリケーションで。そこで使用したコントロールを知っている人はいますか?

WPF にプロパティ グリッド コントロールはありますか? Windows フォームでグリッドを使用しようとしました。このグリッドを私の要件に合わせてカスタマイズするのは難しいようです。オブジェクトのすべてのプロパティが、基本クラスから最も派生したクラスまで直接表示されます。

4

2 に答える 2

10

WPF を使用すると、多くのことが可能になります。Windows フォームとは異なり、WPF は HTML と同じようにテンプレート化およびスタイル設定できるため、さまざまなアプリケーションのさまざまな外観を見つけることができます。実際の設計者は、Windows フォームでは実現が非常に難しいルック アンド フィールを簡単に実現できます。当然、非常に柔軟であるため、高度にスタイル化されたアプリケーションの外観は、アプリケーションごとに大きく異なります。

そうは言っても、非常に優れたサードパーティのコントロールがいくつかあります. 通常の容疑者はすべて WPF 用のコントロール ライブラリを持っています: TelerikInfragisticsComponentOneActiproDevxpressなどです。特に、Actipro の Property Gridは非常に優れています。私が評価していないオープンソースのものもあるので、話すことはできません. WPF は、コンパイル済みのスタイルをコントロールに適用することで "テーマ" にすることもできます。テーマの例はhttp://wpfthemes.codeplex.com/にあります。

最後に、WPF によって描画および管理されるビューと、ビュー モデルと呼ばれるビューの論理的抽象化を分離する方法を学ぶまで、WPF の長所は完全には実現されません。Josh Smith は、Model-View-ViewModel として知られるこのパターンに関する優れた記事をhttp://msdn.microsoft.com/en-us/magazine/dd419663.aspxで公開しています。

于 2010-01-25T19:59:34.987 に答える
5

Microsoft は、WPF に PropertyGrid コントロールを含めることに意味がないと考えていたと思います。独自のコントロールを作成するのは非常に簡単であり、コントロールを作成した場合、スタイルを設定するのが難しくなるからです。

独自の PropertyGrid を作成するには、 を左にドックされたを含む をプロパティ名用に、 を値エディター用に使用<ListBox>して、プロパティのグループ化を有効にします。<ItemsTemplate><DockPanel><TextBlock><ContentPresenter>Category

記述する必要があるコードは、オブジェクトを反映してプロパティのリストを作成するコードだけです。

使用するものの大まかなアイデアは次のとおりです。

DataContext =
  from pi in object.GetType().GetProperties()
  select new PropertyGridRow
  {
    Name = pi.Name,

    Category = (
      from attrib in pi.GetCustomAttributes(false).OfType<CategoryAttribute>()
      select attrib.Category
    ).FirstOrDefault() ?? "None",

    Description = (
      from attrib in pi.GetCustomAttributes(false).OfType<DescriptionAttribute>()
      select attrib.Description
    ).FirstOrDefault(),

    Editor = CreateEditor(pi),

    Object = object,
  };

CreateEditor メソッドは、実際のプロパティ値へのバインディングを使用して、プロパティに適したエディターを構築するだけです。

XAML では、次の<ListBox.ItemTemplate>ようになります。

<DataTemplate>
  <DockPanel>
    <TextBlock Text="{Binding PropertyName}" Width="200" />
    <ContentPresenter DataContext="{Binding Object}" Content="{Binding Editor}" />
  </DockPanel>
</DataTemplate>

残りの詳細を記入させていただきます。

于 2010-01-25T22:53:34.650 に答える