WPF Datagrid Cell的DataTemplate的更改导致不期望的结果

时间:2018-08-06 13:49:21

标签: wpf datagrid cell datatemplate

我有一个WPF DataGrid,并且已经修改了它的第一列的单元格模板,如下所示:

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

我还有第二个“普通”(未修改)列,称为ID(整数类型)。

出现不想要的结果,如下所示:

步骤1:我打开数据网格所在的用户控件:

enter image description here

第2步:我单击第一个单元格以在其中写一些内容(由于某种原因,只需单击一次即可将光标放在其中。一个“普通”单元格需要2-一个焦点和一个-将光标放在其中)

enter image description here

第3步:我在其中写了一些内容(此单元格仍处于聚焦状态)

enter image description here

第4步:我第一次单击第二个单元格(并且仅获得焦点)。

enter image description here

第5步:我再次单击第二个单元格(光标在那里,默认值自动写入)。此时第一个单元格中的值将消失。

enter image description here

第6步:我在第二个单元格中写了我的值:

enter image description here

第7步:我按下键盘上的Enter键,就会发生这种情况

enter image description here

也许它的原因相对简单,但我认为仅凭文字很难很好地描述它。

1 个答案:

答案 0 :(得分:1)

该列的CellTemplate应该包含只读的TextBlock。您应将可编辑的TextBox放在CellEditingTemplate中。

内置DataGridTextColumn就是这样工作的。默认情况下,您会看到一个TextBlock,当您双击该单元格以进入编辑模式时,将出现一个TextBoxText的{​​{1}}属性和TextBlock的{​​{1}}属性绑定到相同的源属性。