2012-07-12 5 views
3

항목을 가로로 정렬하는 ListBox를 만들고 싶습니다. 각 항목은 TextBox 여야하며 텍스트의 양에 관계없이 목록 상자를 세로로 채워야합니다. Tweetdeck을 사용한 적이 있다면 비슷한 효과를 기대하고 있습니다. 여기에 내가있어 무엇 :빈 TextBox 스트레치를 세로로 만드는 방법은 무엇입니까?

<ListBox 
     Background ="DarkGray" 
     ScrollViewer.HorizontalScrollBarVisibility="Auto" 
     ScrollViewer.VerticalScrollBarVisibility="Disabled" 
     ItemsSource="{Binding Path=Items}"> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <DockPanel IsItemsHost="True"/> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Border BorderBrush="Gray" BorderThickness="2" CornerRadius="5" Margin="2,0,2,0"> 
        <Grid Width="250"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*" /> 
         </Grid.ColumnDefinitions> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="*" /> 
         </Grid.RowDefinitions> 
         <TextBox 
          Grid.Row="0" 
          Grid.Column="0" 
          VerticalAlignment="Stretch" 
          Text="{Binding Path=Messages, Mode=OneWay}" /> 
        </Grid> 
       </Border> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

은 무엇 발생하는 텍스트 상자가 고집이 아니라 수직으로 스트레칭보다는, 그 안에 텍스트를 맞는 것입니다. 내가 도와주지 않았 DockPanel에 대한 그리드 전환 시도했습니다. TextBox의 Height 속성을 바인딩 할 수 있지만 불쾌한 것 같습니다.

내가 놓친 트릭이 있습니까?

+0

CSS가있을 수 있습니다. 블록과 높이 값을 표시하도록 설정하십시오. 이거 해봤 니? –

+0

모든 표준 WPF 컨트롤은 기본값으로 'VerticalAlignment = Stretch'를 가지고 있으므로 설정을 많이하지는 않습니다. 대신'ItemsPanelTemplate'을 Grid로 만들려고 했습니까? 적어도 그 내용은 부모님을 자동으로 채울 것입니다. DockPanel이 필요합니까? – Charleh

+3

CSS는 WPF에서 꽤 쓸모 없게 될 것입니다 :) – Charleh

답변

5

ListBox에 VerticalContentAlignment="Stretch"을 설정해야합니다.

+0

저는 VerticalContentAlignment가 대부분의 컨트롤에서 기본적으로 VerticalAlignment처럼 늘리지 않도록 설정되어 있는지 궁금합니다. – Charleh

+0

+1. 그게 전부예요. 고맙습니다! – TarkaDaal

관련 문제