我正在尝试使用可编辑的单元格创建一个ListView,比如当我双击一个单元格它变成一个可编辑的ComboBox时,我可以输入一些内容或从comboItems中选择。在我双击要编辑的单元格之前,我不希望看到组合框箭头(在我处于编辑模式之前,单元格不应该作为组合框出现,而是作为Label / TextBlock)。
到目前为止,我所做的是:
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox IsEditable="True" SelectedIndex="0" >
<ComboBoxItem>One</ComboBoxItem>
<ComboBoxItem>Two</ComboBoxItem>
<ComboBoxItem>Three</ComboBoxItem>
</ComboBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
但是在进入编辑模式之前我仍然可以看到ComboBox箭头(我根本就不知道如何隐藏箭头)ListView的选定行和ComboBox之间的颜色也有差异,请参阅:
请帮助您提供示例代码,指示或想法。提前谢谢。
PS:我是WPF的初学者
答案 0 :(得分:2)
您可以将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>
答案 1 :(得分:1)
使用正常和其他两个不同的模板进行编辑。并显示/隐藏。
你可以进一步发展这种方法。
<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");
}