2009-04-22 16 views
1

私はこのSilverlightの新機能ですので、この質問が明らかであれば謝りますが、1からxまでの任意の数の行を持つことができるHTMLテーブルと同様のものを作成したいと思います。Silverlight動的サイズテーブル

テーブルを増やすには、追加する行数を増やす必要があります。また、テーブル全体の幅と高さを設定し、各行のすべてのテキストを動的に適切なサイズに変更したいと考えています。

このようなXAMLの外観はどうですか?

Cheers、Chris。

EDIT:応答のため

おかげで、私がしたいことは、これをアーカイブするために作られたすべての提案の混合物であることが表示されます:

<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> 

これにより、3行のグリッドが作成されます。各グリッドは利用可能なスペースの均等なシェアを得ています。 (高さの星は利用可能なスペースを分割することを意味します)

実行時に行を追加する場合は、

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行の定義を追加されているもの

、:RowDefinitionsコレクションにRowDefinitionsを追加し続けるためにあなたがループすることができ、もちろん

Grid g = this.Grid1 
g.RowDefinitions.Add(new RowDefinition) 

、および他の設定あなたはおそらくのListBox(または、データグリッド)になります前に、またはグリッドに

+0

グリッドはレイアウト用で、動的データ用ではありません。しかし、彼が実際に探していることを彼の質問で伝えるのは難しいです。 –

+0

細かい点です。 – STW

2

それらを追加した後RowDefinitionのプロパティ

ここれますスコット・GUによって良いSilverlightのチュートリアル:あなたはあなたのXAMLファイルでグリッドを使用したい

http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-5-using-the-listbox-and-databinding-to-display-list-data.aspx

+0

私はあなたを理解していると思うので、各行にListBoxを使用することができ、リストボックス内では必要な列のテンプレートグリッドを使用します。リストボックスに高さ/幅を設定すると、リストアイテムをすべてサイズ変更する必要がありますか? – Owen

1

。ここに例があります: グリッドが定義されたら、以前の投稿だけが簡単に列と行を削除して削除できます。配置を「ストレッチ」に設定すると、グリッドのサイズをブラウザで変更できます。

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

私はハード少しは把握することが分かっ一つは、行または列をchangeaと自動幅に設定する方法です。ここにその例があります。

ColumnDefinitionとして暗いobjCol =何も

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

あなたは他に幅を設定したい場合値はDouble.NaNの場所に数字を入れるだけです。

ああ、すべてのコードはVB.netです。

関連する問題