0

私は現在、ペイントのようなWPFアプリケーションのクラスを作成しようとしています。LineMovement(StartPointからEndPointまでの線)とPathMovement(PointCollectionタイプのプロパティPointsで指定されたすべての点を通る線)を基本クラスにする必要があります。これらのクラスはControlから継承し、ControlTemplateを介して外観を取得します。

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

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

WPFコントロールの再描画を強制するにはどうすればよいですか?

4

3 に答える 3

1

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

于 2010-02-09T17:44:58.927 に答える
1

TemplateBindingは純粋な悪であることが判明しました。

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

私自身への注意:このひどいTemplateBindingを二度と使用しないでください。

于 2009-08-27T12:07:40.887 に答える
0

MovementオブジェクトのDPにAffectsArrangeメタデータプロパティ(http://msdn.microsoft.com/en-us/library/system.windows.frameworkpropertymetadataoptions.aspx)を持たせる必要があります。これにより、プロパティが変更されたときにWPFがそれを認識します。再描画する必要があります

于 2009-08-25T05:28:04.733 に答える