2012-05-02 155 views
3

我有一个包含网格的列表框。 网格有一个标签列,一个GridSplitter和一个TextBox列。 如何让网格占用ListBox的宽度并使TextBox使用网格列的整个空间?让文本框填充网格中的剩余空间

<Grid> 
    <ListBox x:Name="myList" Margin="4" ItemsSource="{Binding Path=Parameter}" MinHeight="60" Grid.IsSharedSizeScope="True" HorizontalAlignment="Stretch" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid x:Name="parameterGrid" HorizontalAlignment="Stretch"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition x:Name="labelColumn" Width="Auto" SharedSizeGroup="LabelColumn"/> 
         <ColumnDefinition x:Name="splitterColumn" Width="5"/> 
         <ColumnDefinition x:Name="textColumn" Width="*"/> 
        </Grid.ColumnDefinitions> 
        <TextBlock Text="{Binding Path=Key}" Grid.Column="0"/> 
        <GridSplitter Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/> 
        <TextBox Grid.Column="2" Text="{Binding Path=Value, UpdateSourceTrigger=LostFocus}" 
                   IsEnabled="{Binding ElementName=_view, Path=DataContext.IsEditEnabled}"> 
        </TextBox> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Grid> 

的参数只是为了验证这个想法:

public class Parameter 
{ 
    public string Key { get; set; } 
    public string Value { get; set; } 

    public Parameter(string key, string value) 
    { 
     Key = key; 
     Value = value; 
    } 
} 

回答

9

尝试在ListBox设置HorizontalContentAlignment="Stretch"

+0

哇!很简单。你不会相信我尝试了多少东西。但这不是它的一部分。非常感谢你! – tobre

1

不给TextBox的任何宽度和高度。