2011-09-21 56 views
5

我有一個列表框,我想要佔用我的窗口的寬度,列表框項目將拉伸到列表框的大小。拉伸到列表框寬度的列表框項目,但沒有超過寬度

每個列表框項目都將是一個數據模板,其寬度爲150左右,其餘大小爲描述的文本框。我希望描述texbox延伸到剩餘的可用大小。因此,這裏是我認爲會創建這個佈局例子XAML:

<Window x:Class="test.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <ListBox Margin="20,20,20,20" ItemsSource="{Binding Path=List}"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="HorizontalContentAlignment" 
        Value="Stretch" /> 
     </Style> 
    </ListBox.ItemContainerStyle> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border BorderBrush="AliceBlue" 
        BorderThickness="1"> 
       <Grid> 
       <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="150" /> 
       <ColumnDefinition Width="*" /> 
       </Grid.ColumnDefinitions> 
       <Label Width="20" 
         Content="Test" /> 
       <ComboBox Width="130" /> 
       <TextBox Grid.Column="1" 
          HorizontalAlignment="Stretch" 
          HorizontalContentAlignment="Stretch" /> 
       </Grid> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    </ListBox> 

然而,當我在文本框中輸入內容,文字的寬度變過去列表框的寬度,列表框項目不斷增加並顯示水平滾動條。

我想實現的是文本框的最大寬度,直到列表框的最大寬度不會變大。任何人都知道我可以如何實現這種佈局?

回答

6

嘗試添加ScrollViewer.HorizontalScrollBarVisibility="Disabled"ListBox,它爲我工作。

+0

工作完美,非常感謝! – cab

2

問題是,你的Listbox包含一個scrollviewer,這意味着它的孩子可以有他們想要的任何大小,滾動查看器將照顧到這一點。你的ColumnDefinition實際上說「使用我們擁有的所有無限空間」。這在我腦海 一種解決方案是將電網寬度綁定到ListBox ActualWidth的

Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=ActualWidth}" 

但propably更好的是Dmitrys的解決方案。