2012-03-18 63 views
1

我無法讓列表框項目拉伸到整個列表框的寬度。ListBoxItem Horizo​​ntalContentAlignment =拉伸不起作用

下面是我爲我的列表框

<ListBox x:Name="MyListBox" 
       VerticalAlignment="Stretch" 
       HorizontalAlignment="Stretch" 
       HorizontalContentAlignment = "Stretch" 
       Margin="0,10,0,0" 
       ItemsSource="{Binding Path=Users}" 
       ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
       Grid.Column="0" 
       Grid.ColumnSpan="1" 
       Grid.Row="1" 
       Grid.RowSpan="3">      
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <local:MyListBoxTemplate/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
</ListBox> 

我曾嘗試在其他職位找到了以下的建議,但他們沒有工作對我來說XAML:

  • 設定ListBox的Horizo​​ntalContentAlignment爲Stretch
  • 覆蓋listboxitem的樣式,即列表框xaml中的ItemContainerStyle標籤中的新樣式(注意:我正在使用大都會導航主題)
  • EDITTING在CoreStyles.xaml的DefaultListBoxItemStyle風格,包括Horizo​​ntalContentAlignmemt

難道是因爲我使用我的數據模板的一個單獨的XAML文件? 或者我的數據模板有問題? 有沒有人有什麼我可以嘗試的建議?

我看到了某處也許我可以將ListBoxItem寬度綁定到ListBox的實際寬度?

我很新,所以我提前道歉,如果我錯過了一些非常簡單/明顯的東西!

下面是我的數據模板:

<Grid x:Name="LayoutRoot" HorizontalAlignment="Stretch" ShowGridLines="True" Height="20"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="10*" /> 
     <ColumnDefinition Width="30*" /> 
     <ColumnDefinition Width="300*" /> 
     <ColumnDefinition Width="50*" /> 
     <ColumnDefinition Width="10*" /> 
    </Grid.ColumnDefinitions> 
    <Image x:Name="TwitterImageIcon" 
      Grid.Column="1" 
      Grid.ColumnSpan="1" 
      Source="{Binding Path=imageUrl}" 
      /> 
    <StackPanel Orientation="Horizontal" Grid.Column="2" Grid.ColumnSpan="1" HorizontalAlignment="Stretch" > 

     <TextBlock x:Name="TwitterUsernameTextBlock" 
        Text="{Binding Path=username,StringFormat='@\{0\} '}"/> 
     <TextBlock x:Name="TwitterFullNameTextBlock" 
       Text="{Binding Path=fullname}"/> 
    </StackPanel> 


     <Button x:Name="InfoButton" 
      Content="Info" 
      Grid.Column="3" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch"/> 
     <Border x:Name="StyleBorder" /> 
    </Grid> 

任何建議,不勝感激。

在此先感謝。

更新:忘了提,當添加:

<ListBox...> 
     <ListBox.Resources> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
      </Style> 
     </ListBox.Resources> 
    </ListBox> 

使列表框項目的higlighting盤旋在選擇時,當它工作但是會影響國際化的主題是不同的風格的休息大都會主題。

回答

7

試試這個,你的列表框裏面:

<ListBox...> 
    <ListBox.Resources> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     </Style> 
    </ListBox.Resources> 
</ListBox> 

EDIT1 (對不起我的英文不好)

查找CoreStyles.xaml(尋找x:Key="DefaultListBoxItemStyle")的ListBoxItem風格。 內部的風格,找到名爲x:Name="contentControl"的ContentControl中並添加HorizontalContentAlignment屬性,代碼看起來像這樣變更後:

<ContentControl x:Name="contentControl" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" > 
    <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" VerticalAlignment="Center" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="7"/> 
</ContentControl> 

現在你可以刪除Listbox.Resources,我展示的第一個答案......如果你不希望這種行爲給你所有的列表框,你可以複製這個樣式並給它一個不同的鍵。

+0

啊我應該提到我已經試過這個(但是在ListBox中。ItemContainerStyle標籤),但是這會覆蓋CoreStyles.xaml中大都會主題定義的樣式,因此每個ListBox項目的高亮部分現在都是默認樣式,並且與大都會主題的其餘部分不匹配。感謝您的回覆,雖然 – rallen 2012-03-18 17:39:20

+0

看到我的編輯1,應該工作:) – Leo 2012-03-18 23:54:38

+0

完美謝謝你這麼多獅子座! – rallen 2012-03-19 08:05:13

相關問題