2009-04-22 51 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。