2016-07-25 2 views
0

Я хочу добавить кнопку в combobox, которая содержит ItemTemplate. Во-первых, что я попытался было это:WPF добавить кнопку в 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> 

Но у меня есть исключение, в котором говорилось, что я могу добавить элементы управления, который имеет ItemTemplate. Второй из них:

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

Но в этом случае кнопка добавляется после каждого флажка. У вас есть идеи, как это сделать только один раз? Спасибо вам заблаговременно)

+0

редактировать 'template' свойство самого ComboBox. В VS щелкните правой кнопкой мыши на CB, выберите «Редактировать шаблон» - «Редактировать копию», а затем добавьте кнопку в этот шаблон – ASh

+0

Ваш вопрос непонятен - Вы хотите, чтобы кнопка была одной из опций в ComboBox? Вы хотите создать свой собственный ComboBox, который содержит кнопку? Вы хотите, чтобы каждая опция в ComboBox содержала кнопку? – MichaelThePotato

+0

Я хочу добавить кнопку в качестве первого элемента combobox, и все следующие элементы должны быть элементами из ItemsTemplate –

ответ

0

Попробуйте это в случае загрузки Windows и он должен работать.

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. Щелкните правой кнопкой мыши ComboBox в конструктор поверхности/или в документе Outline на левой стороне за пределами конструктора поверхности> Изменить шаблон> Редактировать копию.

  2. Это создаст некоторые стили под Window.Resources, найти ItemsPresenter и обернуть его StackPanel и Button, как показано ниже:

    <StackPanel Grid.ColumnSpan="2"> 
        <Button Content="Additional"/> 
        <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
    </StackPanel> 
    
Смежные вопросы