2

SLを習い始めました。サイズ変更時にキャンバス内のすべての要素のサイズを変更しようとしました。しかし、私は正しい方法を見つけることができません。

これは私がしたことです

  1. キャンバス内のすべての子要素を反復処理します
  2. 新しいサイズに基づいてスケール X & Y を計算します
  3. そして、スケール値に各要素のサイズ プロパティを掛けます

しかし、SL3.0 では、UIelement に新しいサイズを設定するためのサイズ プロパティが見つかりません。サンプルコードの下

    private void testCanvas_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        var scaleX = e.NewSize.Width / e.PreviousSize.Width;
        var scaleY = e.NewSize.Height / e.PreviousSize.Height;

        for (int i = 0; i < testCanvas.Children.Count; i++)
        {
            UIElement ui = testCanvas.Children[i];
            // but no ui.width or ui.height
        }
    }

また、サイズが変更されたキャンバスを基準にして各要素を新しい位置に移動するオプションを見つけることができません...

誰かが私に正しい方向を向けることができます..

アップデート:

MSCUIでこのようなことを達成したかった..より明確にするために、いくつかのスクリーンショットを追加しました

初期画面はこんな感じ。 代替テキスト http://img690.imageshack.us/img690/4611/initial.jpg

ウィジェットを展開すると、ズームされ、他のウィジェットが縮小します

代替テキスト http://img26.imageshack.us/img26/8725/afterexpand.jpg

ズーイングの部分だけを行う必要があります。何か案は??

4

3 に答える 3

1

MSCUI デモは Martin grayson によって作成され、彼はここで彼のドラッグ ドック コントロールを公開しています: http://mightyeaty.members.winisp.net/blacklight.silverlight/同じクールなレイアウト機能も実行します)。ただし、デフォルトでは、コンテンツの自動サイズ変更はサポートされていません。

幸いなことに、2009 年 11 月の Toolkit には、最小限のコードで必要なことを実行できるViewBoxという新しいコントロールがあります。

これのデモがhttp://silverlight.net/content/samples/sl3/toolkitcontrolsamples/run/default.htmlにあります。ViewBox のデモは、左側のメニューの下部にあります。

ツールキットはhttp://silverlight.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=36060からダウンロードできます。

于 2009-12-10T13:05:30.760 に答える
0

子 UIElement を渡す GetLeft()、GetRight()、GetTop()、および GetBottom() メソッドを使用します。

private void testCanvas_SizeChanged(object sender, SizeChangedEventArgs e)
{
    var scaleX = e.NewSize.Width / e.PreviousSize.Width;
    var scaleY = e.NewSize.Height / e.PreviousSize.Height;

    for (int i = 0; i < testCanvas.Children.Count; i++)
    {
        UIElement ui = testCanvas.Children[i];

        double left = Canvas.GetLeft(ui);
        double top = Canvas.GetTop(ui);
        double right = Canvas.GetRight(ui);
        double bottom = Canvas.GetBottom(ui);
    }
}
于 2009-12-09T13:42:41.987 に答える
0

自分で要素のサイズを変更する代わりに、それらをグリッドに配置し、要素のサイズをセルのサイズに相対的にする必要があります (つまり、要素にマージンを設定します)。グリッドのサイズが変更されると、要素が移動およびサイズ変更されます。

于 2009-12-09T13:25:24.493 に答える