2009-05-05 8 views
11

Mam problemy z rozciągnięciem ComboBox, aby wypełnić całą szerokość kolumny w GridViewColumn. Powinieneś również zmienić rozmiar po zmianie rozmiaru kolumny. W poniższym przykładzie mam StackPanel z wewnątrz. Zostanie ustawiony tak, aby rozciągać i będzie rozciągał się w celu wypełnienia szerokości StackPanel.Utwórz pola ComboBox WPF o szerokości całej kolumny

Następnie dodaję ListView z jedną kolumną, zawierającą StackPanel z ComboBox. Zarówno modele StackPanel, jak i ComboBox są ustawione na rozciąganie, ale nie. Używam kolorów tła, aby zidentyfikować rozmiar StackPanel s, i nie ma czerwonego, chyba że ustawię szerokość lub doda elementy do ComboBox tak, że potrzebuje większej szerokości.

Próbowałem również odtwarzać z właściwością HorizontalContentAlignment bez powodzenia.

<StackPanel Height="59" Margin="45,12,38,0" VerticalAlignment="Top" Background="Green"> 
    <ComboBox HorizontalAlignment="Stretch" /> 
</StackPanel> 

<ListView x:Name="MyListView" Margin="0,106,0,0"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Num" Width="70"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel Background="red" Orientation="Horizontal" HorizontalAlignment="Stretch"> 
          <ComboBox HorizontalAlignment="Stretch" /> 
         </StackPanel> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
    <ListViewItem></ListViewItem> 
</ListView> 
+0

Ponów flagę moderatora; przegapiłeś 26 grudnia i 6 marca (chyba, że ​​brakuje mi logu) –

+0

Użyj 'DockPanel' zamiast' StackPanel' – Aaaaaaaa

+0

O ile w StackPanel nie będzie czegoś, możesz mieć więcej szczęścia z Border. –

Odpowiedz

15

Spróbuj ustawić Style z ListViewItem. Usunąłem również twój StackPanel.

<ListView x:Name="MyListView" Margin="0,106,0,0"> 
    <ListView.Resources> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     </Style> 
    </ListView.Resources> 

    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Num" Width="170"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox /> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 

    <ListViewItem></ListViewItem> 
</ListView> 
+0

Dzięki! To jednak działa - daje mi nowy problem. Cóż, w uproszczonym przykładzie podałem w pytaniu, że wszystko jest w porządku, ale moja prawdziwa lista jest bardziej złożona. Podczas dodawania stylu - bez konieczności używania żadnego obiektu StackPanel - zmiana rozmiaru kolumny jest bardzo powolna. Jeśli dodaję otaczający StackPanel z właściwością Orientation = "Horizontal", zmiana rozmiaru jest płynna. Ten problem występuje, gdy mam zazwyczaj> 1000 elementów na mojej liście. Jakiś pomysł, co to daje? Nie używasz rozwiązania, ale dodanie tła = "przezroczysty" daje ten sam problem. Czuję się jakbym próbował wszystkiego .. Dzięki! – stiank81

+2

Może dodać, że dodanie otaczającego StackPanel w orientacji poziomej zatrzymuje ComboBox przed wypełnieniem całej kolumny ... – stiank81

+0

Cóż, odpowiedziałeś na pytanie, więc zamykam to. Dzięki. Proszę sprawdzić moje nowe pytanie dotyczące zmiany rozmiaru kolumn w kwestii wydajności: http://stackoverflow.com/questions/829242/wpf-column-resize-performance-issues – stiank81