2017-02-06 4 views
1

Ich habe ein ComboBox, die ein CheckBox umfasst die DataTemplate ändern, das funktioniert gut, wenn sie auf ihrem eigenen gemacht, aber wenn sie in ein DataGrid die beweglichen CheckBox ist nicht anklickbar.WPF CheckBox in ComboBox Datatemplate nicht in Datagrid funktioniert

Arbeits Code:

<ComboBox ItemsSource="{Binding WrapUpHelper.WrapUps}"> 
       <ComboBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Vertical"> 
          <StackPanel Orientation="Horizontal"> 
           <CheckBox IsChecked="{Binding IsSelected}" 
              Width="20" /> 
           <TextBlock Text="{Binding FriendlyDescription}" /> 
          </StackPanel> 
          <ListBox ItemsSource="{Binding WrapUps}" 
            Visibility="{Binding Path=IsSelected, Converter={StaticResource BooleanToVisibilityConverter}}" 
            BorderThickness="0" 
            Background="Transparent"> 
           <ListBox.ItemTemplate> 
            <DataTemplate> 
             <StackPanel Orientation="Horizontal"> 
              <CheckBox IsChecked="{Binding IsSelected}" 
                 Width="20" /> 
              <TextBlock Text="{Binding FriendlyDescription}" /> 
             </StackPanel> 
            </DataTemplate> 
           </ListBox.ItemTemplate> 
          </ListBox> 

         </StackPanel> 
        </DataTemplate> 
       </ComboBox.ItemTemplate> 
      </ComboBox> 

Beweis:

enter image description here

Aber wenn sie auf eine DataGrid diese Logik hinzufügen, statt das Häkchen zum CheckBox Hinzufügen der ComboBox schließt mit nichts ausgewählt .

Nichtarbeitscode:

<DataGridTemplateColumn Header="Wrap up" Width="100"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <ComboBox ItemsSource="{Binding WrapUpHelper.WrapUps}"> 
           <ComboBox.ItemTemplate> 
            <DataTemplate> 
             <StackPanel Orientation="Vertical"> 
              <StackPanel Orientation="Horizontal"> 
               <CheckBox IsChecked="{Binding IsSelected}" 
                  Width="20" /> 
               <TextBlock Text="{Binding FriendlyDescription}" /> 
              </StackPanel> 
              <ListBox ItemsSource="{Binding WrapUps}" 
                Visibility="{Binding Path=IsSelected, Converter={StaticResource BooleanToVisibilityConverter}}" 
                BorderThickness="0" 
                 Background="Transparent"> 
               <ListBox.ItemTemplate> 
                <DataTemplate> 
                 <StackPanel Orientation="Horizontal"> 
                  <CheckBox IsChecked="{Binding IsSelected}" Width="20" /> 
                  <TextBlock Text="{Binding FriendlyDescription}" /> 
                 </StackPanel> 
                </DataTemplate> 
               </ListBox.ItemTemplate> 
              </ListBox> 

             </StackPanel> 
            </DataTemplate> 
           </ComboBox.ItemTemplate> 
          </ComboBox> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 

enter image description here

+0

Erhalten Sie irgendein Ereignis durch? Könnte versuchen, 'ClickMode =" Drücken Sie "' zu den CB's –

+0

@ChrisW. Bitte ändere das, um zu antworten, und ich kann es richtig markieren, das erlaubt die 'CheckBoxes' in einem' DataGrid' anzukreuzen, jetzt ist das einzige Problem bei jedem Klick das 'ComboBox' schließt sich. –

+1

Alrighty, PS für den zweiten Teil habe ich immer sowas gemacht wie [dies] (http://stackoverflow.com/questions/3667203/expand-the-combobox-and-its-items-with-it-gets-focus). :) –

Antwort

1

Wenn Sie eine verschachtelte Steuerelement, dessen Eltern haben normalerweise kapern HitTestVisibility können Sie Blase aus und lassen Sie die verschachtelte Kontrolle, darauf zu reagieren ist normal Ereignisse statt der es ist Elternteil mit ClickMode Enumeration über die Eigenschaft von ClickMode="Pressed" hinzugefügt, um die betreffende Kontrolle.

Hoffe das hilft, Prost!

Verwandte Themen