UserControl中的TextBox不占用所有空间

时间:2012-01-28 12:27:59

标签: wpf listbox width

我有一个包含自定义项目的WPF列表框。每个项目都是一个用户控件,由一个带有两个文本框的网格组成。我希望正确的一个占用所有空间来填充ListBoxItem。但我所做的就是项目本身占用了整个空间,但文本框占用了其内容的大小。

所以这就是列表框:

    <ListBox x:Name="leftListBox" Grid.Column="0" Margin="10" 
             HorizontalContentAlignment="Stretch">
        <ListBox.ItemTemplate>
            <DataTemplate>                    
                    <local:CustomLine />                    
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

用户控制:

<UserControl x:Class="SharpComparer.CustomLine"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="30">
    <UserControl.Resources>
        <Style TargetType="{x:Type TextBox}">
             <Setter Property="VerticalAlignment" Value="Center" />
        </Style>
    </UserControl.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="40" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <TextBox x:Name="NumberColumn" x:FieldModifier="public" 
                 Text="{Binding LineNumber}"
                 Grid.Column="0" HorizontalAlignment="Right" />
        <TextBox x:Name="TextColumn" x:FieldModifier="public" 
                 Text="{Binding Text}"
                 Grid.Column="1" HorizontalAlignment="Left" />
    </Grid>
</UserControl>

我已经在一些MSDN帖子和Stack Overflow上的一些研究之后尝试过:将Horizo​​ntalContentAlignment设置为Stretch for Listbox.ItemContainerStyle。我用了一些边框来找到造成问题的部分。 ListBoxItems似乎也采用整个宽度,usercontrol及其网格。尽管我认为网格的ColumnDefinition中的Width="*"会这样做,但文本框并没有占用所有空间。
另一个想法是将文本框宽度绑定到其父级大小,但是它也占用左侧文本框的空间(这是有意义的,因为它获得整个宽度)并且减去此宽度似乎不起作用。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您必须更改此UserControl代码:

<TextBox x:Name="TextColumn" x:FieldModifier="public" 
                 Text="{Binding Text}"
                 Grid.Column="1" HorizontalAlignment="Left" />

到此:

<TextBox x:Name="TextColumn" x:FieldModifier="public" 
                 Text="{Binding Text}"
                 Grid.Column="1" HorizontalAlignment="Stretch" />