我有一个包含自定义项目的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上的一些研究之后尝试过:将HorizontalContentAlignment设置为Stretch for Listbox.ItemContainerStyle。我用了一些边框来找到造成问题的部分。 ListBoxItems似乎也采用整个宽度,usercontrol及其网格。尽管我认为网格的ColumnDefinition中的Width="*"
会这样做,但文本框并没有占用所有空间。
另一个想法是将文本框宽度绑定到其父级大小,但是它也占用左侧文本框的空间(这是有意义的,因为它获得整个宽度)并且减去此宽度似乎不起作用。
我做错了什么?
答案 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" />