2016-04-28 10 views
1

私はビューポートのように機能するWPF UserControlを持っています(私はそれを以下のコンテキストで "ビューポート"と呼びます)。このビューポートでは、コンテンツをズームしてパンすることができます(ズームは、レイアウトまたはレンダリングトランスフォームを使用してコンテンツをズームします)。基本的にコンテンツは単なるキャンバスです。このキャンバスには、図形のメタデータを表示するために使用されるいくつかの図形といくつかのテキストボックスが含まれています。 ズームファクタが1の場合はすべて問題ありませんが、ズームアウトすると、キャンバスが縮小され、テキストが非常に小さいためにメタデータが読み込めなくなるTextBoxも縮小されます。スケーリングされた親のスケーリングされていないコントロール

テキストボックスのサイズを画面上で変更しないように、テキストボックスを強制的に拡大/縮小することはできますか?

私は、(ズームを引き起こす)ビューポートの変形をテキストボックスに(何らかの形で)渡し、その逆を適用することを考えましたが、これは私にとっては間違っています。 もう1つの方法は、テキストボックスを保持するAdornerを使用することです。私はコントロール付きの飾り手についてのトピックを見つけましたが、このaproachが他のものより優れているかどうかは分かりませんが、here on Stackoverflowです。

誰かがより良い解決策を得たら、私はそれを感謝します。事前

おかげ

答えて

1

Transform.Inverseプロパティは、あなたの親コントロールの変換「元に戻す」ために使用できること、があります。したがって、基本的には親コントロールをMyTransformにバインドし、すべての子コントロールをMyTransform.Inverseにバインドします。そうすれば、変換は子供の位置に適用されますが、サイズは適用されません。

私はそれが "間違っている"ことに同意しますが、私はそれがあなたの最良の選択であると確信しています。

+1

問題は、ビューポートの内容を拡大/縮小することです。しかし、内容の内容は縮尺すべきではありません。私はデータコンテキストとして使用されるクラスを作成することでそれを解決しました。このクラスは、スケールを表すdoubleを格納するプロパティを保持します。ビューポートには、プロパティ "ContentScale"と変更されたイベントがあります。ですから、基本的には、ContentScaleをデータコンテキストにバインドします。これは、スケーリングされていないコントロールに再度バインドされます。私はScaleTransform(1/ContentScale xとy)にdoubleを変換しています。 – Timo

+0

私はあなたを正しく理解していると思います。親トランスフォームの逆プロパティへのバインディングは、現在手動​​で行っていることとまったく同じ効果を与えるはずです。ビューポート内のすべての要素は、ViewPort.RenderTransform.Inverseを明示的に適用するすべての子を除いて、予想どおりに拡大し続けます。とにかく、あなたはそれが働いてうれしい。 – wilford

+0

はいトランスフォームをバインドすると作業が楽になりますが、変換の1つが実際に使用され、ビューポートがブラックボックスであるかどうかはわかりません。しかし、あなたの助けに感謝します。 – Timo

関連する問題