2009-04-22 90 views
1

我对Silverlight非常陌生,所以我很抱歉如果这个问题很明显,但我想创建一个类似于HTML表的任何数量的行,从1到x。Silverlight动态大小的表

我需要该表与增加的行数一起增长。此外,我希望能够将表格的宽度和高度作为一个整体进行设置,并使每行中的所有文本都能够适当地动态调整大小。

这样的XAML会是什么样子?

干杯,克里斯。

编辑:

感谢您的答复,看来我要的是制成归档此的所有建议的混合物:

<Grid x:Name="ExampleGrid" Height="150" Width="300" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Viewbox Stretch="Fill" Grid.Row="0"> 
    <!-- Two column header --> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="Text One" Height="Auto" /> 
     <TextBlock Text="Text One" Height="Auto" /> 
    </StackPanel> 
    </Viewbox> 
    <Viewbox Stretch="Fill" Grid.Row="1"> 
    <TextBlock Text="Text Two" Height="Auto" /> 
    </Viewbox> 
    <Viewbox Stretch="Fill" Grid.Row="2"> 
    <TextBlock Text="Text Three" Height="Auto"/> 
    </Viewbox> 

回答

1

想到的第一个问题是何时添加行。这是纯粹的设计时间吗?或者它是运行时间要求?

<Grid x:Name="ExampleGrid" Height="20" Width="200"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <TextBlock Text="Text One" Height="Auto" Grid.Row="0"/> 
    <TextBlock Text="Text Two" Height="Auto" Grid.Row="1"/> 
    <TextBlock Text="Text Three" Height="Auto" Grid.Row="2"/> 
</Grid> 

这将创建一个三行网格。每个电网获得相同的可用空间份额。 (高度上的星号表示分割可用空间)

如果您要在运行时添加一行。

ExampleGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Star) }); 

TextBlock block = new TextBlock() { Text = "Text Four" }; 
Grid.SetRow(block, 3); 

ExampleGrid.Children.Add(block); 

问题带有获取文本本身来放大或缩小以适合可用空间,我不知道该怎么做。

0

我是相当新的XAML我自己,但我敢肯定你不需要在XAML中做任何事情,而是在代码中做任何事情。 XAML被编译为BAML(二进制),并且您的代码与BAML中定义的.NET对象一起工作,XAML本身只是一种人类可读的设计时间语言。

什么你可能后programmitically加入行定义,这将是沿着线的东西:

Grid g = this.Grid1 
g.RowDefinitions.Add(new RowDefinition) 
当然可以循环的

不断添加RowDefinitions到RowDefinitions收集,并设置其它之前,或将它们添加到网格

+0

网格应该用于布局,而不是用于动态数据。但是,他的问题很难说他真的在寻找什么。 – 2009-04-22 15:01:05

+0

好点,先生! – STW 2009-04-22 15:27:47

1

你想在你的XAML文件中使用的网格。这里是一个例子: 一旦你有了网格定义,你可以轻松地删除列和行,就像上一篇文章所说的那样。将对齐设置为Stretch将允许网格使用浏览器调整大小。

<Grid x:Name="grdName"HorizontalAlignment="Stretch" VerticalAlignment="Stretch" > 

一件事,我发现了一个小很难搞清楚是怎么changea行或列,并将其设置为自动宽度。这是一个例子。

昏暗objCol作为ColumnDefinition =无

objCol = grdName.ColumnDefinitions.Item(0) objCol.Width =新GridLength(Double.NaN)

如果你想宽度设置为其他任何值只需将该数字放在Double.NaN的位置。

哦,所有的代码是VB.net。