让文本框填满网格中的剩余空间

3

我有一个ListBox,其中包含一个Grid。Grid有一个Label列、一个GridSplitter和一个TextBox列。我如何使Grid占用整个ListBox的宽度,并使TextBox使用Grid列的整个空间?

<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;
   }
}
2个回答

10

尝试在 ListBox 上设置 HorizontalContentAlignment="Stretch"


哇!太简单了。你不会相信我尝试了多少种方法,但这并不是其中之一。非常感谢! - tobre

1

不要为文本框指定任何宽度和高度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接