C# 在resize上调整silverlight画布中所有元素大小的最佳方法是什么?

C# 在resize上调整silverlight画布中所有元素大小的最佳方法是什么?,c#,silverlight,silverlight-3.0,transform,C#,Silverlight,Silverlight 3.0,Transform,我刚刚开始学习SL。我已经尝试在调整画布大小时调整画布内所有元素的大小。但是我找不到正确的方法 这就是我所做的 遍历画布中的所有子元素 根据新尺寸计算X&Y刻度 并将比例值与每个元素的大小属性相乘 但是在SL3.0中,我在UIelement中找不到任何大小属性来设置新的大小。下面是示例代码 private void testCanvas_SizeChanged(object sender, SizeChangedEventArgs e) { var scaleX

我刚刚开始学习SL。我已经尝试在调整画布大小时调整画布内所有元素的大小。但是我找不到正确的方法

这就是我所做的

  • 遍历画布中的所有子元素
  • 根据新尺寸计算X&Y刻度
  • 并将比例值与每个元素的大小属性相乘
  • 但是在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
            }
        }
    
    private void testCanvas\u SizeChanged(对象发送方,sizechangedventargs e)
    {
    var scaleX=e.NewSize.Width/e.PreviousSize.Width;
    var scaleY=e.NewSize.Height/e.PreviousSize.Height;
    for(int i=0;i
    此外,我也找不到一个选项来移动每个元素到新的位置相对于大小改变画布

    有人能给我指一下正确的方向吗

    更新:

    我想在……中取得这样的成就。。为了更清晰,我添加了一些截图

    这就是初始屏幕的外观。

    在扩展小部件时,它会被放大,其他小部件也会缩小


    我只需要做缩放部分。有什么想法吗?

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

    使用传递子元素的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);
        }
    }
    
    private void testCanvas\u SizeChanged(对象发送方,sizechangedventargs e)
    {
    var scaleX=e.NewSize.Width/e.PreviousSize.Width;
    var scaleY=e.NewSize.Height/e.PreviousSize.Height;
    for(int i=0;i
    MSCUI演示由Martin grayson构建,他在这里发布了他的Drag Dock控件:(Telerik和Infragistics现在还提供了一些其他TileView控件,它们也执行相同的酷布局功能)。但是,默认情况下,这不支持自动调整内容大小

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

    这里有一个演示。ViewBox演示位于左侧菜单的底部


    工具包可从

    下载,谢谢Guffa。。但问题是我设计的控件不是有序的(不像行、列)。。把它们排列成网格是困难的。。无论如何,我会试试…@Ramesh:是的,我理解,因为这是你的评论和否决投票之间的一天。这个问题的目的是为了它是谁……你想要的真实布局特征的细节有点粗略,你可以考虑为问题增加一些细节。例如,画布是否包含可滚动的文本项?如果是这样的话,这些简单的项目应该显示更多的文本还是文本的大小应该增加?你想让物品与画布边界的距离增加还是保持不变,物品区域只会增加?@Anthony,添加了更多信息,请查看。。