2

Canvasサイズに応じてコンテンツをスケーリングする a を実装する必要があります。Viewboxその中のすべてをスケーリングする があることを私は知っています。ただし、一部の要素はサイズが固定されており、スケーリングできないため、使用できません。

また、サイズを親要素にバインドするにはどうすればよいですかCanvas(たとえば、サイズ変更可能なウィンドウ)。Windows 用の sizeToContent があります。サイズを正確に逆に合わせたいと思います。また、キャンバスはホスト要素のサイズに基づいていくつかの描画を使用します.再描画はどのようにトリガーされ、有効な(または最小)サイズを取得した場合にのみ描画されるようにするにはどうすればよいですか?

4

3 に答える 3

3

キャンバスに幅または高さを指定しない場合、使用可能なすべてのスペースが自動的に使用されます。これは、デフォルトVerticalAlignmentで とHorizontalAlignmentが に設定されているためStretchです。

一部のコンテンツは固定サイズであるため、すべてのコンテンツをスケーリングせずに、サイズに応じてコンテンツをスケーリングするキャンバスとはどういう意味ですか?

コメント後に更新

描画アルゴリズムがすでにコンテンツをキャンバスの高さと幅に合わせて拡大縮小している場合、必要なのはキャンバスのサイズを変更して領域に合わせることだけですか? その場合、ハードコードされた高さ/幅の値を削除するだけで、キャンバスはコンテナーに合わせてサイズ変更されます。

ただし、この後、描画アルゴリズムで Height/Width の代わりに ActualHeight/ActualWidth を使用する必要がある場合があります。ActualHeight/ActualWidth は、レイアウト コンテナーがキャンバスに与える値を返すため、これらはキャンバスが描画される値を表します。

于 2009-05-01T13:08:36.440 に答える
2

私のLondon Underground demoで、すべての質問に対する答えを見つけることができると思います。

于 2009-05-01T13:15:31.527 に答える
0

私はメモリからこれを行っていますが、正しく思い出すと、ウィンドウはその ControlTemplate (ContentPresenter がある) の一部として Panel または Canvas のいずれかを使用します。つまり、Window に直接配置された Canvas には、自動的にサイズ変更する問題があります。他の場所のように。これに対処するには、いくつかの基本的な方法があります。

1 Window が使用する新しい ControlTemplate を作成します。:(
2 Window 内の Canvas ではなく、直接 Window にコンテンツを配置します。:/
3 名前によるバインドを行います。:)

<MyWindow x:Name="topWindow">
    <Canvas x:Name="topCanvas" Width="{Binding ElementName=topWindow, Path=ActualWidth}" Height="{Binding ElementName=topWindow, Path=ActualHeight}">
        ...Content...
    </Canvas>
</MyWindow>

(たまたま、この方法でキャンバス内にグリッドをバインドすることがよくあります。そのため、あるグリッド位置から別のグリッド位置に移動するアイテムを簡単にアニメーション化できます。)

于 2011-11-02T19:49:50.427 に答える