2011-02-03 24 views
2

タイムラインの種類(アニメーション用)編集)。グリッドを使用してタイムラインコントロールを作成する可能性

PaintEventハンドラですべてのものを手動で描画することで、このような簡単なWinformsコントロールのプロトタイプを作成しましたが、これはうまく機能しましたが、おそらく最も効率的でした。

私はWPFを使って完全な機能を備えたコントロールを作成しており、グリッドコントロールをタイムラインとして使用する可能性について懸念しています。つまり、列で表される離散時間の位置(キーフレームが存在する場合は影付き)

私はこのコントロールに関する何かを知っていません。これはWPFで初めて使用されたので、誰かがこのアイデアにコメントできるかどうか疑問に思っていましたか?

具体的には、パフォーマンスの観点から、この方法で使用するように設計されたグリッドですか、または設計時にGUIを構成するためのものですか?多数の要素を使用して構成を動的に変更しようとすると、重大なパフォーマンス上のペナルティが発生しますか? (〜2000-3000はおそらく最悪の場合です)

グリッドを変更するのは簡単ですか?そして、たとえば細胞を陰影にするようなことをするには? Grid.NumberOfColumns = xの単純な問題か、すべての要素が一意のオブジェクトである必要がありますか?

ありがとうございました!

答えて

2

Gridを使用することは確かにオプションであり、XAML内のGridで動作し、コードの背後はかなり簡単です。

<Grid Name="MyGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"></RowDefinition> 
     </Grid.RowDefinitions> 
    </Grid> 

    MyGrid.ColumnDefinitions.Add(new ColumnDefinition() 
       { Width = new GridLength(0, GridUnitType.Star) }); 

次に、Rectangleを使用してシェーディングを処理することができます。あなたは様々な要因に依存することで得ることができるかもしれませんが

<Rectangle Grid.Column="0"></Rectangle> 

問題はパフォーマンスに降りてくるだろう。パフォーマンスが悪い場合は、別の方法としてItemsControl内のレイアウトコンテナとしてVirtualizingStackPanelを使用して、UI virtualizationを指定します。 Data virtualizationも問題になる可能性があります。VirtualizingStackPanelを使用してUIの仮想化後に対処する必要があります。 ItemsControlはアイテムにDataTemplateを提供することを可能にし、サイズに関して最初のステートメントに基づいてGridを使用するより長期的にはより良いアプローチになるはずです。

Expression BlendはWPFを使用して作成され、アニメーションを広範にサポートしています。インタラクティブで堅牢なタイムラインを含むので、それを行うことができます。そうでなければWPFを理解することが重要です。そうでなければ、理解が深まるにつれて、最初のアプローチをリファクタリングしてしまいます。可能であれば、WPFがWinFormsとどのように異なっているかについてのまともな基礎を得るために試してみてください。

+0

返信いただきありがとうございます。私はWPFでもっと読んでいるうちに過ごしました、そして、私はもっとWinFormsとは何か違うのか理解していますが、もっと感銘を受けました。 私はvirtualizingStackPanelを使用して潜在的なキーフレームの「静的テーブル」を作成し、ユーザーはこれを 'ビューア'領域の下で拡大縮小して移動することができます。右。 このようなコントロールを使用するには、各キーフレームセクションまたは非キーフレームセクションを矩形オブジェクトで表す必要がありますか?充填するときにこれらを再利用できますか? – sebf

+0

(最後の文章が明確でない(文字数制限)の場合は、「キーフレーム」を表すオブジェクトを1つ、「何も」を表すオブジェクトを1つ持ち、水平パネルに10の「長方形はありません」と記入します)その時点のキーフレームを示す「キーフレーム矩形」を1つ) ありがとう! – sebf

+0

@sebfそれはうまくいくかもしれません...矩形は視覚的です;コンテナではなく、コンテナ内に再利用して格納することができます。キーフレームにコンテンツが含まれるようにするには、おそらくBorder/Gridでラップする必要があります。 ThinkGrid - > Rectangle/TextBlockここで、Rectangle/TextBlockはツリー内の同じレベルにあり、Rectangleはビジュアルを提供し、TextBlockはコンテンツを提供します。 –

関連する問題