我有一個帶有自定義項目的WPF列表框。每個項目是由包含兩個文本框的網格組成的用戶控件。我想正確的一個需要所有的空間來填充ListBoxItem。但是我所能工作的是該項目本身佔據了整個空間,但文本框佔據了其內容的大小。UserControl中的TextBox不佔用全部空間
所以這是列表框:
<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的帖子已經嘗試過,並在這裏對堆棧溢出:設置用於Listbox.ItemContainerStyle的HorizontalContentAlignment以拉伸。我用一些邊界來找出造成問題的部分。 ListBoxItems似乎佔據了整個寬度,usercontrol和它的網格。儘管我認爲在網格的ColumnDefinition中的Width="*"
可以做到這一點,但文本框並不佔用所有的空間。
另一個想法是將文本框寬度綁定到它的父級大小,但它也需要左側文本框的空間(這是合理的,因爲它獲得了整個寬度),減去這個寬度似乎不起作用。
我在做什麼錯?
上的用戶控件的文本框嘗試HorizontalContent =拉伸和使用TextAllignment的文本。爲什麼不爲此使用GridView? – Paparazzi 2012-01-28 14:04:56
您是不是指HorinzontalAlignment而不是HorizontalContent?這工作。說實話,我不能給出一個真正的理由,爲什麼我使用Grid而不是GridView - 除了它是標準的。 – Sentropie 2012-01-28 15:57:14