2011-01-08 17 views
11

teması olarak belirlenir. Bunun için bir cevap bekledim, ancak olası kopyalar sunumdan ziyade sunumla daha çok ilgileniyor.Streç ListBox Öğeleri, ListBox'un tam genişliğine alan mı çarptı? ListBox stili bir temayla

Temel bir liste kutumuz var ve her bir öğenin içeriği basit bir dizedir.

ListBox'un kendisi, kılavuz kabını doldurmak için uzatılır, ancak her bir ListBoxItem'in hitadisi, ListBox genişliğini yansıtmaz. Her öğe için hitarea (işaretçi iletişim alanı) sadece metin içeriğinin genişliği gibi görünüyor. Metin boyundan bağımsız olarak, bu gerilmeyi tüm yol boyunca nasıl yaparım.

HorizontalContentAlignment öğesini Stretch olarak ayarlıyorum, ancak bu sorunumu çözmüyor. Diğer tek tahminim, içeriğin aslında esnetilmesidir, ancak arka plan görünmezdir ve böylece fare işaretçisini yakalamamaktadır.

<ListBox 
    Grid.Row="1" 
    x:Name="ProjectsListBox" 
    DisplayMemberPath="Name" 
    ItemsSource="{Binding Path=Projects}" 
    SelectedItem="{Binding Path=SelectedProject}" 
    HorizontalContentAlignment="Stretch"/> 

XAML bu konuda oldukça basittir. Öğelerden birinde metin üzerinde fare kullanırsam, öğenin tüm genişliği etkinleşir. Sanırım görünmez olan etkileşimli bir arka plan oluşturmayı bilmem gerekiyor. Bunun çalışması için ItemContainerStyle öğesinde

+0

Lütfen XAML'nizi gönderin. – Zamboni

cevap

23

HorizontalContentAlignment="Stretch" ayarlanmalıdır.

Xaml Örnek

<ListBox xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <ListBox.ItemsSource> 
     <x:Array Type="{x:Type sys:String}"> 
      <sys:String>String 1</sys:String> 
      <sys:String>String 2</sys:String> 
      <sys:String>String 3</sys:String> 
      <sys:String>String 4</sys:String> 
     </x:Array> 
    </ListBox.ItemsSource> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
     </Style> 
    </ListBox.ItemContainerStyle> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding}" Background="Green"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Güncelleme
Eğer Disabled ListBox en ScrollViewer.HorizontalScrollBarVisibility özelliğini ayarlarsanız, öğeleri her zaman olacak, Fredrik adlı cevabı ekleyerek Ayrıca, bu

<ListBox ...> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
     </Style> 
    </ListBox.ItemContainerStyle> 
+0

Şu anda seçili stilimin üzerine yazmadan bunu yapmanın bir yolu var mı? Harici bir tema kullanıyorum ve bunu düzenlemek istemiyorum. – Nicholas

+0

ListBox'un kendisinde kullanırsam stilimin tamamen üzerine yazıyormuş gibi görünüyor. – Nicholas

+0

@Nicholas: Güncellememi dene –

2

deneyin ListBox'un tam olarak istemci genişliğine sahip olmalıdır.