2012-01-28 25 views
1

我有一個帶有自定義項目的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的Horizo​​ntalContentAlignment以拉伸。我用一些邊界來找出造成問題的部分。 ListBoxItems似乎佔據了整個寬度,usercontrol和它的網格。儘管我認爲在網格的ColumnDefinition中的Width="*"可以做到這一點,但文本框並不佔用所有的空間。
另一個想法是將文本框寬度綁定到它的父級大小,但它也需要左側文本框的空間(這是合理的,因爲它獲得了整個寬度),減去這個寬度似乎不起作用。

我在做什麼錯?

+0

上的用戶控件的文本框嘗試Horizo​​ntalContent =拉伸和使用TextAllignment的文本。爲什麼不爲此使用GridView? – Paparazzi 2012-01-28 14:04:56

+0

您是不是指HorinzontalAlignment而不是Horizo​​ntalContent?這工作。說實話,我不能給出一個真正的理由,爲什麼我使用Grid而不是GridView - 除了它是標準的。 – Sentropie 2012-01-28 15:57:14

回答

2

你必須從這個改變你的用戶控件代碼:

<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" /> 
+0

這就是要點,謝謝! – Sentropie 2012-01-28 15:55:43

相關問題