2009-08-24 44 views
0

現在、ペイントのようなWPFアプリケーションのクラスを作成しようとしています。 LineMovementクラス(StartPointからEndPointまでのライン)とPathMovement(PointCollectionタイプのプロパティポイントで指定されたすべてのポイントを通るライン)をベースにしなければなりません。これらのクラスはControlから継承し、ControlTemplateを通して外観を取得します。WPFコントロールの再描画を強制する

また、ControlTemplateは、特定の行のすべての移動可能な点に小さな視覚的マーカーを含むMovementオブジェクトのAdornerLayerにAdornerを追加します。これらのマーカーは、マウスでのドラッグをサポートします。

私の問題は、どういうわけか自分のポイントが移動されたときに私のMovementクラスが再描画しないということです。私はMoleを使ってコードをデバッグし、ラインを視覚化するために使用されたポリラインが変更されたポイント値(Pointsプロパティで表示可能)を取得するが、再描画しないことがわかった。

WPFコントロールの再描画を強制的に行うことはできますか?あなたがあなたの運動を行う必要があり

答えて

1

TemplateBindingは、双方向データバインディング(つまり、ポリラインの新しい値でPointsコレクションを更新する)をサポートしていません。これは、コントロールテンプレートで使用する単方向データバインディングのためのものです。 Bea Stollnitzのブログエントリ:http://bea.stollnitz.com/blog/?p=38

0

がDPSはAffectsArrangeのメタデータプロパティ(http://msdn.microsoft.com/en-us/library/system.windows.frameworkpropertymetadataoptions.aspx)はオブジェクト - プロパティの変更そのように、WPFは、それが

+0

すでにこれを試してみてください。 本当に変わったことは、モールを使ってモーションを表すポリラインを調べると、Pointコレクションに変更されたポイントが表示されますが、再描画されないということです。モールを使用すると、編集 "(別名を変更せずに文字列を取り、"保存 "ボタンを押す)、ポリラインのPointsCollectionを必要に応じて再ペイントします。 – chrischu

1

TemplateBindingのは純粋な悪であることが判明し再描画する必要があります知っています。

{TemplateBinding Points}でポリラインのポイントをバインドすると、{Binding RelativeSource = {RelativeSource TemplatedParent}}でバインドすると完全に動作しますが、それ自体は更新されません。

自分自身に注意してください。このテンプレートを使用しないでください。

関連する問題