2011-02-06 81 views
2

我有一個問題,佈局控制佈局幫助在WPF

<ListBox Name="Tweets" Grid.Row="1" ItemsSource="{Binding Path=Tweets}" Background="#1F0000FE"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <local:TweetTemplate Margin="10"/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

這裏是我的模板:

<Grid Name="grid"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="25*" /> 
     <RowDefinition Height="95*" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="110" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Image Source="{Binding Path=FromImage}" Grid.RowSpan="2" Margin="7" /> 
    <TextBlock Text="{Binding Path=From}" Margin="5" Grid.Column="1" /> 
    <TextBlock Text="{Binding Path=Text}" TextWrapping="WrapWithOverflow" Grid.Row="1" Margin="7" Grid.Column="1" /> 
</Grid> 

我的問題是,當這種<TextBlock Text="{Binding Path=Text}"文本很長,它延伸的網格。然後伸展家長控制。我希望該文本不會拉伸Listbox,並且當它到達ListBox寬度的末尾時,切換到新行。而當窗口被調整大小時,應該增加ListBox的大小。它意味着使用所有的窗口。

回答

3

列表框中顯示的項目創造的ScrollViewer,所以你應該手動ScrollViewer.Horizo​​ntalScrollBarVisibility屬性禁用它:

<ListBox Name="Tweets" 
      Grid.Row="1" 
      ItemsSource="{Binding Path=Tweets}" 
      Background="#1F0000FE" 
      ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
     ... 
    </ListBox> 
1

您應該可以將MaxWidth設置爲文本塊,並設置TextWrapping="Wrap"。這應該爲您提供理想的結果。在你的列表框中,你也可以說HorizontalContentAlignment="Stretch",這樣你的模板化項目就可以擴展到itemscontrol的內部限制。

+0

它不幫助我。我不需要固定的TextBlock,它應該有ListBox等寬度。 – Sergey 2011-02-06 20:50:33

+0

您可以對數據模板網格執行一些元素屬性綁定,例如Width =「{Binding ActualWidth,ElementName = booklist}」。這將設置寬度到列表框。您可能需要找到將其設置爲ItemsPresenters寬度的方法。 – CodeWarrior 2011-02-06 21:17:47