2010-12-31 19 views
2

現在、ハードコードされているColumnDefinition(336px)の幅を、親/コンテナの残りの領域をすべて満たすようにするには、以下のコードを参照してください。テキストブロックを展開して残りの領域を塗りつぶす

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid Height="480" Width="800"> 
    <ListBox Name="LatestScoresListBox" Margin="9" Background="Black"> 
     <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="64"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 

      <TextBlock Grid.Column="0" Margin="4" Width="56" Height="56" Text="{Binding Text1}" TextAlignment="Center" TextWrapping="Wrap"/> 

      <Grid Grid.Column="1"> 
       <Grid.RowDefinitions> 
       <RowDefinition Height="0.5*"/> 
       <RowDefinition Height="0.5*"/> 
       </Grid.RowDefinitions> 

       <Grid Grid.Row="0"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="336"/> 
        <ColumnDefinition Width="48"/> 
       </Grid.ColumnDefinitions> 

       <TextBlock Grid.Column="0" Margin="4" Text="{Binding Text2}"/> 
       <TextBlock Grid.Column="1" Margin="4" Text="{Binding Text3}" TextAlignment="Center"/> 
       </Grid> 
       <Grid Grid.Row="1"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="336"/> 
        <ColumnDefinition Width="48"/> 
       </Grid.ColumnDefinitions> 

       <TextBlock Grid.Column="0" Margin="4" Text="{Binding Text4}"/> 
       <TextBlock Grid.Column="1" Margin="4" Text="{Binding Text5}" TextAlignment="Center"/> 
       </Grid> 
      </Grid> 
      </Grid> 
     </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
    </Grid> 
</Page> 

私は、幅を定義する1 *としての幅を定義し、任意の運なしであまりにもTextBlock内の幅と、おそらく他のものを定義しないで試してみました。

このコードからわかるように、親グリッドの領域は、最初の列に対して64pxを差し引いた後の800pxの再描画です。

誰かが私に手がかりを与えることができますか? :|

おかげ

答えて

2

非常に簡単であることが判明しました。 Laurent Bugnionに感謝:) TechDays 11 Switzerlandで彼の "Windows Phone 7 Overview"セッションを見ていました。 42分辺りで、彼は私が私と一緒にやろうとしていたListBoxでやった。 Blendでのクリック数は少なく、結果は次のとおりです。

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid Height="480" Width="800"> 
     <ListBox Name="MyListBox" Margin="9" Background="Black"> 
      <ListBox.Resources> 
       <Style x:Key="MyListBoxItemStyle" TargetType="ListBoxItem"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="ListBoxItem"> 
           <Grid> 
            <ContentPresenter/> 
           </Grid> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ListBox.Resources> 
      <ListBox.ItemContainerStyle> 
       <StaticResource ResourceKey="MyListBoxItemStyle"/> 
      </ListBox.ItemContainerStyle> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="64"/> 
          <ColumnDefinition Width="*"/> 
         </Grid.ColumnDefinitions> 

         <TextBlock Grid.Column="0" Margin="4" Width="56" Height="56" Text="{Binding Text1}" TextAlignment="Center" TextWrapping="Wrap"/> 

         <Grid Grid.Column="1"> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="0.5*"/> 
           <RowDefinition Height="0.5*"/> 
          </Grid.RowDefinitions> 

          <Grid Grid.Row="0"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*"/> 
            <ColumnDefinition Width="48"/> 
           </Grid.ColumnDefinitions> 

           <TextBlock Grid.Column="0" Margin="4" Text="{Binding Text2}"/> 
           <TextBlock Grid.Column="1" Margin="4" Text="{Binding Text3}" TextAlignment="Center"/> 
          </Grid> 
          <Grid Grid.Row="1"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*"/> 
            <ColumnDefinition Width="48"/> 
           </Grid.ColumnDefinitions> 

           <TextBlock Grid.Column="0" Margin="4" Text="{Binding Text4}"/> 
           <TextBlock Grid.Column="1" Margin="4" Text="{Binding Text5}" TextAlignment="Center"/> 
          </Grid> 
         </Grid> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </Grid> 
</Page> 

ListBox内のGridに追加されたContentPresenterを確認してください。ここで魔法が起きました;)

+0

ありがとうございます。この問題のために私の髪を引っ張っていた。 – zyash

3

ListBoxHorizontalContentAlignment="Stretch"プロパティを設定してみてください。

デフォルトでは、ListBoxは、Leftアラインメントを使用してすべてのアイテムを整列します。 に設定して、ListBoxのアイテムがすべての空き領域を占めるようにする必要があります。

+0

これも前に試してもうまくいきませんでした。はい、ListBoxはすでにすべてのコンテナの領域を取るためにstrechedされていますが、私はその内容/アイテムを同じことを行うことはできません。他の提案はありますか? – TheBlueSky

+0

'Silverlight'または' WPF'ですか? – decyclone

+0

SilverlightとWindows Phone 7 ...違いがありますか? – TheBlueSky

関連する問題