2016-07-25 1 views
0

Je souhaite ajouter un bouton dans la zone de liste déroulante, qui contient ItemTemplate. Tout d'abord, que j'ai essayé était la suivante:WPF ajouter un bouton dans la zone de liste déroulante

<ComboBox Name="oilWells_comboBox" 
      Style="{StaticResource MMComboBox}" 
      MaxWidth="100" 
      ItemsSource="{Binding DataContext.OilWellCollection, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:MainWindow}}" 
      Margin="0"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> 
       <CheckBox IsChecked="{Binding Path=IsDisplay}" Checked="FilterDataGrid" Unchecked="FilterDataGrid"> 
        <CheckBox.Content> 
         <TextBlock MinWidth="100" Text="{Binding Path=Name}" HorizontalAlignment="Center" TextWrapping="Wrap" TextTrimming="CharacterEllipsis"/> 
        </CheckBox.Content> 
       </CheckBox> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
    <Button Content="Clear" Height="20" HorizontalAlignment="Stretch"></Button> 
</ComboBox> 

Mais j'ai une exception, qui dit ce que je ne peux pas ajouter des articles à contrôler, qui a ItemTemplate. Le second était le suivant:

<ComboBox Name="oilWells_comboBox" 
      Style="{StaticResource MMComboBox}" 
      MaxWidth="100" 
      ItemsSource="{Binding DataContext.OilWellCollection, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:MainWindow}}" 
      Margin="0"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> 
       <CheckBox IsChecked="{Binding Path=IsDisplay}" Checked="FilterDataGrid" Unchecked="FilterDataGrid"> 
        <CheckBox.Content> 
         <TextBlock MinWidth="100" Text="{Binding Path=Name}" HorizontalAlignment="Center" TextWrapping="Wrap" TextTrimming="CharacterEllipsis"/> 
         <Button Content="Clear" Height="20" HorizontalAlignment="Stretch"></Button> 
        </CheckBox.Content> 
       </CheckBox> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Mais dans ce cas, le bouton ajoute après chaque case. Avez-vous des idées, comment le faire une seule fois? Merci d'avance)

+0

modifier 'la propriété template' de ComboBox lui-même. Dans VS faites un clic droit sur CB, sélectionnez 'Modifier le modèle' -' Modifier la copie', puis ajoutez le bouton dans ce modèle – ASh

+0

Votre question n'est pas claire - Voulez-vous le bouton comme l'une des options de la ComboBox? Voulez-vous créer votre propre ComboBox qui contient un bouton? Voulez-vous que chaque option de la ComboBox contienne un bouton? – MichaelThePotato

+0

Je souhaite ajouter un bouton en tant que premier élément de liste déroulante, et tous les éléments suivants doivent être des éléments de ItemsTemplate –

Répondre

0

Essayez ceci dans l'événement windows loaded et cela devrait fonctionner.

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    Button b = new Button(); 
    b.Content = "My Button"; 
    b.Click += new RoutedEventHandler(MyBtn_Click); 
    oilWells_comboBox.Items.Add(b); 
} 
1
  1. Clic droit ComboBox en surface/ou dans Outline Document Designer sur le côté gauche de la surface design extérieur> Modifier le modèle> Modifier copie.

  2. Cela va générer des styles sous Window.Resources, trouver ItemsPresenter et l'envelopper avec StackPanel et Button comme indiqué ci-dessous:

    <StackPanel Grid.ColumnSpan="2"> 
        <Button Content="Additional"/> 
        <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
    </StackPanel>