2016-03-02 3 views
0

Я пытаюсь создать ListView с редактируемыми ячейками, скажем, когда я дважды щелкаю по ячейке, он превращается в редактируемый ComboBox, тогда я могу ввести что-то или выбрать из comboItems. Прежде чем дважды щелкнуть по ячейке для редактирования, я бы не хотел видеть comboBox Arrow (ячейка не должна представлять себя как выпадающий список, прежде чем я нахожусь в режиме редактирования, но как Label/TextBlock).WPF Editable Listview с редактируемым ComboBox

То, что я сделал до сих пор это:

<GridViewColumn.CellTemplate> 
    <DataTemplate> 
      <ComboBox IsEditable="True" SelectedIndex="0" > 
       <ComboBoxItem>One</ComboBoxItem> 
       <ComboBoxItem>Two</ComboBoxItem> 
       <ComboBoxItem>Three</ComboBoxItem> 
      </ComboBox> 
    </DataTemplate> 
</GridViewColumn.CellTemplate> 

Но я до сих пор можно увидеть ComboBox стрелку перед тем, как в режиме редактирования (я просто не знаю, как скрыть стрелка) также есть разница в цвета между выбранной строки в ListView и в ComboBox, см:

enter image description here

Не могли бы вы помочь с кодами образцов, указателей или идей. Заранее спасибо.

PS: новичок в WPF

ответ

1

Вы можете использовать DataGrid (не ListView-GridView) с DataGridTemplateColumn и указать различные шаблоны для отображения и редактирования режимов (используя статический пример):

<DataGridTemplateColumn> 
    <!-- display mode template --> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="One" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 

    <!-- edit mode template --> 
    <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <ComboBox IsEditable="True" SelectedIndex="0" > 
       <ComboBoxItem>One</ComboBoxItem> 
       <ComboBoxItem>Two</ComboBoxItem> 
       <ComboBoxItem>Three</ComboBoxItem> 
      </ComboBox> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 


на самом деле, вы хотите связать свои данные, чтобы ваш ComboBox фактически выбирает что-то и TextBox дисплеи, выбор:

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding SelectedNumber}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <ComboBox IsEditable="True" SelectedIndex="0" 
         ItemsSource="{Binding Numbers}" SelectedItem="{Binding SelectedNumber}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 
0

Используйте два разных шаблона один нормальный и другой для редактирования. И показать/скрыть.

Вы можете использовать этот подход дальше.

 <ListView.Resources> 
      <DataTemplate x:Key="Tmpl1"> 
       <TextBlock Text="{Binding Name}" GotFocus="TextBlock_GotFocus" MouseDown="TextBlock_MouseDown_1"/> 
      </DataTemplate> 
      <DataTemplate x:Key="Tmpl2"> 
       <ComboBox LostFocus="ComboBox_LostFocus_1"/> 
      </DataTemplate> 
     </ListView.Resources> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Name" CellTemplate="{StaticResource Tmpl1}"/> 
      </GridView> 
     </ListView.View> 

Код:

private void TextBlock_MouseDown_1(object sender, MouseButtonEventArgs e) 
{ 
    ((GridView)ListView1.View).Columns[0].CellTemplate = (DataTemplate)ListView1.FindResource("Tmpl2"); 
} 

private void ComboBox_LostFocus_1(object sender, RoutedEventArgs e) 
{ 
    ((GridView)ListView1.View).Columns[0].CellTemplate = (DataTemplate)ListView1.FindResource("Tmpl1"); 
} 
Смежные вопросы