2017-02-06 11 views
1

У меня есть ComboBox, который включает в себя CheckBox путем изменения DataTemplate, это хорошо работает, когда сделано самостоятельно, но при его перемещении в DataGridCheckBox не кликабельны.WPF CheckBox в ComboBox DataTemplate не работает в DataGrid

Рабочий код:

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

Доказательство:

enter image description here

Но при добавлении этого же логику к DataGrid, вместо добавления галочки в CheckBox, то ComboBox закрывает ничего выбрано ,

Non рабочий код:

<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

Вы получаете через них какое-либо событие? Можете попробовать добавить 'ClickMode =" Нажмите «' в CB –

+0

@ChrisW. Пожалуйста, измените это, чтобы ответить, и я могу отметить его правильно, это позволяет отмечать «CheckBoxes» в «DataGrid», теперь единственная проблема при каждом нажатии 'ComboBox' закрывается. –

+1

Alrighty, PS для второй части. Я всегда делал что-то вроде [этого] (http://stackoverflow.com/questions/3667203/expand-the-combobox-and-its-items-when-it-gets-focus). :) –

ответ

1

Если у вас есть вложенное управление которого родитель обычно угоняет HitTestVisibility вы можете пузырь, и позволяет вложенный контролю реагировать на это нормально событие вместо он является родителем, используя ClickMode перечисление через свойство ClickMode="Pressed", добавляемое к соответствующему элементу управления.

Надеюсь, это поможет, ура!

 Смежные вопросы

  • Нет связанных вопросов^_^