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 构建,他在此处发布了他的 Drag Dock 控件:http: //mightyeaty.members.winisp.net/blacklight.silverlight/(现在 Telerik 和 Infragistics 还提供了一些其他 TileView 控件也执行相同的酷布局功能)。但是,默认情况下,这不支持自动调整内容大小。

幸运的是,2009 年 11 月的 Toolkit 中有一个新控件:ViewBox,它可以用最少的代码完成您需要的工作。

在http://silverlight.net/content/samples/sl3/toolkitcontrolsamples/run/default.html有一个演示。ViewBox 演示位于左侧菜单的底部。

Toolkit can be downloaded from http://silverlight.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=36060

于 2009-12-10T13:05:30.760 回答
0

与其自己调整元素的大小,不如将它们放在一个网格中,让元素的大小与单元格的大小相关(即在元素上设置边距)。调整网格大小时,元素会移动并调整大小。

于 2009-12-09T13:25:24.493 回答
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 回答