首页 > 解决方案 > 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>

我还有第二个“普通”{not modified} 列,称为 ID(int 类型)。

不想要的结果如下图所示:

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

在此处输入图像描述

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

在此处输入图像描述

第 3 步:我在里面写了一些东西(这个单元格仍然聚焦)

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

第 7 步:我按下键盘上的 Enter 按钮,这会发生

在此处输入图像描述

可能原因比较简单,但我发现只用文字很难形容。

标签: wpfdatagridcelldatatemplate

解决方案


CellTemplate列的 应该包含一个只读的TextBlock. 您应该将可编辑的内容TextBox放在CellEditingTemplate.

这就是内置的DataGridTextColumn工作原理。默认情况下您会看到 a TextBlock,当您双击单元格进入编辑模式时,会TextBox出现 a。的Text属性TextBlock和 的Text属性TextBox绑定到同一个源属性。


推荐阅读