2009-12-09 56 views
2

我刚开始学习SL。我试图调整其大小的画布内的所有元素。但我找不到正确的方法。在调整大小的Silverlight画布中调整所有元素的最佳方式是什么?

这是我做过什么

  1. 迭代throgh在画布上的所有子元素
  2. calaculate基于新的大小
  3. 并乘以每个元素的大小属性刻度值刻度X &ÿ

但是在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 ..为了更清楚我增加了一些截图

这是初始屏幕的外观。 alt text http://img690.imageshack.us/img690/4611/initial.jpg

并扩大小部件,它就会被放大及其他工具收缩

alt text http://img26.imageshack.us/img26/8725/afterexpand.jpg

我只需要做好zooing部分。有任何想法吗??

+0

下载你想要的真正的布局特性的细节是有点粗略您可以考虑添加一些更细节的问题。例如,画布是否包含可滚动的文本项?如果是的话,这些项目应该简单地显示更多的文字,还是应该增加文字的大小?你是否希望距离画布边界的项目增长或保持不变,项目区域只增长? – AnthonyWJones 2009-12-09 13:58:54

+0

@Anthony,添加了一些更多的信息,请检查.. – RameshVel 2009-12-10 05:23:18

回答

1

的MSCUI演示是由马丁·格雷森建,他已经在这里发表了他将停靠控制:http://mightymeaty.members.winisp.net/blacklight.silverlight/(也有现在可其他一些TileView控件现在从Telerik的和Infragistics的也执行相同的酷排版功能) 。但是,默认情况下,这不支持自动调整内容大小。

幸运的是,在2009年11月的工具包中有一个新的控件:ViewBox这将用最少的代码来完成你所需要的。

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

工具包可以从http://silverlight.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=36060

+0

谢谢马克......这就是我确切需要.....和链接是非常有用的.... – RameshVel 2009-12-10 13:56:34

0

您不应自己调整元素的大小,而应将其放入网格中,并让元素的大小与单元格的大小相关(即设置元素的边距)。当网格调整大小时,元素将被移动并调整大小。

+0

谢谢Guffa ..但是,问题是设计的控件不是有序的(不像行,列)。它很难将它们安排在网格中。无论如何,我会尝试... – RameshVel 2009-12-09 13:33:37

+0

@Ramesh:是的,我明白,因为这是你的评论和downvote之间的一天。这个问题是为谁而设计的...... – Guffa 2009-12-11 06:28:10

0

使用GetLeft(),GetRight(),GetTop()和GetBottom()方法传递子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]; 

     double left = Canvas.GetLeft(ui); 
     double top = Canvas.GetTop(ui); 
     double right = Canvas.GetRight(ui); 
     double bottom = Canvas.GetBottom(ui); 
    } 
} 
相关问题