0

次のように、タッチ イベントでキャンバスのサイズを変更しています。

e.Handled = true;
var transformation = MyCanvas.RenderTransform as MatrixTransform;
var matrix = transformation == null ? Matrix.Identity :transformation.Matrix;

matrix.ScaleAt(e.DeltaManipulation.Scale.X,
               e.DeltaManipulation.Scale.Y,
               e.ManipulationOrigin.X,
               e.ManipulationOrigin.Y);

MyCanvas.RenderTransform = new MatrixTransform(matrix);

キャンバスにはいくつかの子キャンバスがあります。サイズを変更したくありません。実際、サイズを小さくする必要があります。RenderTransform.Inverse を見ましたが、喜びはありません。

4

2 に答える 2

1

以下のコメントを読んだ後に編集

チャートのその場合、異なる軸範囲でチャートを再描画することができます。RenderTransform は十分に正確ではない可能性があり、実際には他のすべて (軸、ラベル、グリッド線など) を縮小する必要があります。

以前の回答、まだ有効です

子キャンバスを繰り返し処理し、個別にスケーリングする必要があります。私の知る限り、あなたが望むものをサポートするビルドはありません。

親のサイズ変更を無効にする逆スケール変換と、親を小さくするスケール変換の両方を適用する必要があります。

使用しているコードを投稿して、より詳細なヘルプやフィードバックを入手してください。

于 2012-11-28T11:15:23.470 に答える
1

Panelから継承することで、カスタム キャンバスを作成できます。

  1. 新しい依存関係プロパティ: NonInheritableScale

  2. 変換のスケールを NonInhertiableScale プロパティにバインドする間のバインディング

  3. MeasureOverride() および ArrangeOverride() メソッドのオーバーライド。
    これにより、レイアウト中に 1.0/NonInhertiableScale.X および 1.0/NonInhertiableScale.Y が考慮されます。

これは、役立つ可能性のあるカスタム WPF パネルの作成に関する記事です (検索結果、まだ読んでいません)。

于 2012-11-28T11:25:49.183 に答える