2016-07-25 16 views
0

Ich möchte Button in der Combobox hinzufügen, die ItemTemplate enthält. Erstens, dass ich versuchte, war dies:WPF hinzufügen Schaltfläche in der Combobox

<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> 

Aber ich habe eine Ausnahme bekam, das sagte, was ich Elemente hinzufügen kann nicht zu kontrollieren, was ItemTemplate hat. Das zweite war das:

<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> 

Aber in diesem Fall Button nach jedem Kontrollkästchen hinzugefügt. Hast du irgendwelche Ideen, wie man das nur einmal macht? Vielen Dank im Voraus)

+0

bearbeiten 'Template' Eigenschaft ComboBox selbst: Das wird einige Styles unter Window.Resources, finden ItemsPresenter und wickeln Sie es mit StackPanel und Button wie unten gezeigt erzeugen

  • . Klicken Sie in VS mit der rechten Maustaste auf CB, wählen Sie 'Vorlage bearbeiten '-' Kopie bearbeiten' und fügen Sie dann Button in dieser Vorlage hinzu. – ASh

  • +0

    Ihre Frage ist nicht klar - Möchten Sie die Schaltfläche als eine der Optionen in der ComboBox? Möchten Sie Ihre eigene ComboBox erstellen, die eine Schaltfläche enthält? Soll jede Option in der ComboBox eine Schaltfläche enthalten? – MichaelThePotato

    +0

    Ich möchte eine Schaltfläche als das erste Combobox-Element hinzufügen, und alle folgenden Elemente müssen Elemente von ItemsTemplate sein –

    Antwort

    0

    Versuchen Sie dies in Windows geladenen Ereignis und es sollte funktionieren.

    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. Klicken Sie rechts ComboBox in Designer-Oberfläche/oder in Dokumentgliederung auf der linken Seite außerhalb Designer-Oberfläche> Vorlage bearbeiten> Bearbeiten Kopie.

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