WPF数据网格单元的更改';的数据模板导致了不期望的结果
我有一个WPF DataGrid,我修改了它的第一列单元格模板,如下所示:WPF数据网格单元的更改';的数据模板导致了不期望的结果,wpf,datagrid,cell,datatemplate,Wpf,Datagrid,Cell,Datatemplate,我有一个WPF DataGrid,我修改了它的第一列单元格模板,如下所示: <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Grid Margin="0"> <Grid.ColumnDefinitions>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid Margin="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="20"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Text="{Binding W_NAME, Mode=TwoWay}"
BorderThickness="0"
Background="Transparent"/>
<Button Grid.Column="1" Width="20"
Background="Transparent"
IsEnabled="{Binding CantFound}"
HorizontalAlignment="Right">
<StackPanel>
<Image Source="/Resources/Pictures/Search.png"/>
</StackPanel>
</Button>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
我还有第二个“普通”{not modified}列,称为ID(int类型)
不需要的结果如下所示:
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid Margin="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="20"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Text="{Binding W_NAME, Mode=TwoWay}"
BorderThickness="0"
Background="Transparent"/>
<Button Grid.Column="1" Width="20"
Background="Transparent"
IsEnabled="{Binding CantFound}"
HorizontalAlignment="Right">
<StackPanel>
<Image Source="/Resources/Pictures/Search.png"/>
</StackPanel>
</Button>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
步骤1:我打开用户控件,其中我的datagrid是:
第2步:我单击第一个单元格在其中写入内容(出于某种原因,只需单击一次就可以将光标放入其中。一个“普通”单元格需要2个,一个用于聚焦,一个用于将光标放入其中)
第3步:我在其中写了一些东西(此单元格仍处于聚焦状态)
第4步:我第一次单击第二个单元格(它只获得焦点)
第5步:我再次单击第二个单元格(光标在那里,默认值自动写入)。此时,第一个单元格中的值消失
第6步:我在第二个单元格中写入我的值:
第7步:我按下键盘上的enter键,就会发生这种情况
可能它的原因相对简单,但我发现很难用文字来描述它。该列的
cellmetplate
应该包含一个只读TextBlock
。您应该将可编辑的文本框
放在CellEditingTemplate
中
这就是内置的
DataGridTextColumn
的工作原理。默认情况下,您会看到一个TextBlock
,当您双击单元格进入编辑模式时,会出现一个TextBox
。TextBlock
的Text
属性和TextBox
的Text
属性绑定到同一源属性。文本框应位于CellEditingTemplate中。CellTemplate应包含只读文本块。内置的DataGridTextColumn就是这样工作的。我试过了,但现在是另一个问题。第一个单元格中的值仅在我两次单击此单元格时显示。您需要一个带有TextBlock的CellTemplate和一个带有TextBox的CellEditingTemplate。看我的答案。这意味着我也必须有textblock和textbox?一个在cellTemplate中,另一个在CellEditingTemplate中是的,您应该定义带有文本块的cellTemplate和带有文本框的CellEditingTemplate。