2010-08-19 18 views
7

Sto cercando un modo per "riempire completamente" uno GridViewColumn con una casella combinata. Sono in grado di creare un modello di cella con ComboBox e funziona correttamente. Ma la larghezza e l'altezza di ComboBox non sono allineate allo GridViewColumn. Anche se provo a impostare la stessa altezza/larghezza, GridViewColumn nasconde alcune parti del comboBox.Come "compilare" una GridViewColumn con ComboBox (WPF)?

Ci deve essere qualche impostazione o lo stile di istruire WPF per riempire il ComboBox completamente nello spazio disponibile di GridViewColumn

Questo è il mio XAML.

<Window x:Class="WPFStarter.ComboInsideListView.ComboBoxInsideListViewUsingObject" 
     x:Name="userControl" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="ComboBoxInsideListViewUsingObject" Height="300" Width="400"> 
    <Grid> 
     <ListView x:Name="listView" ItemsSource="{Binding ElementName=userControl, 
      Path=DataContext.Items}" SelectedItem="{Binding ElementName=userControl, Path=DataContext.SelectedItem, Mode=TwoWay}">     
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding Path=First}"/> 
        <GridViewColumn Header="Gender"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <ComboBox x:Name="cmb_Gender" Width="75" SelectedValue="{Binding Path=Gender}"      
        ItemsSource="{Binding ElementName=userControl, Path=DataContext.Genders}" GotFocus="ComboBox_GotFocus"   /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 

      </ListView.View> 

     </ListView> 
    </Grid> 
</Window> 

risposta

9

Includere lo stile segue nella listviews-risorse. Quindi è possibile impostare la HorizontalAlignment-proprietà del ComboBox a HorizontalAlignment="Stretch" e farà come si desidera:

<ListView.Resources> 
      <Style TargetType="ListViewItem"> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
      </Style> 
</ListView.Resources> 
+0

Grazie. Funziona bene, ma lascia ancora un margine tra il Combo e il bordo della cella. C'è un modo per rimuoverlo? –

+0

Puoi provare a cambiare il ControlTemplate: http://msdn.microsoft.com/en-us/library/ms788717.aspx – HCL

+0

Grazie, questo link ha aiutato. Contrassegnare la tua risposta come soluzione. –

1

Hai provato questo:

<ComboBox x:Name="cmb_Gender" Width="75" SelectedValue="{Binding Path=Gender}"      
    ItemsSource="{Binding ElementName=userControl, Path=DataContext.Genders}" 
    GotFocus="ComboBox_GotFocus" 
    HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />