WPF Datagrid Cell 的 DataTemplate 的变化导致了不想要的结果
Change of WPF Datagrid Cell's DataTemplate caused not desired result
我有一个 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>
我还有第二个 "ordinary" {not modified} 列,称为 ID(int 类型)。
出现不想要的结果如下图:
第 1 步: 我打开我的数据网格所在的用户控件:
第2步:我点击第一个单元格在里面写东西(出于某种原因,只需要点击一下就可以把光标放在里面。一个"ordinary" 单元格需要 2 个 - 一个用于焦点,一个 - 将光标放入其中)
第3步:我在里面写点东西(这个单元格还是有焦点的)
第 4 步: 我第一次单击第二个单元格(它只获得焦点)。
第 5 步: 我再次单击第二个单元格(光标在那里,默认值自动写入)。此时第一个单元格中的值消失了。
第 6 步: 我在第二个单元格中写下我的值:
第 7 步: 我按下键盘上的回车键,然后发生了这种情况
可能原因比较简单,但我觉得只用文字很难描述好。
列的 CellTemplate
应该包含一个只读的 TextBlock
。您应该将可编辑的 TextBox
放在 CellEditingTemplate
.
中
这就是内置 DataGridTextColumn
的工作原理。默认情况下,您会看到 TextBlock
,当您双击单元格进入编辑模式时,会出现 TextBox
。 TextBlock
的 Text
属性 和 TextBox
的 Text
属性 绑定到相同的来源 属性。
我有一个 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>
我还有第二个 "ordinary" {not modified} 列,称为 ID(int 类型)。
出现不想要的结果如下图:
第 1 步: 我打开我的数据网格所在的用户控件:
第2步:我点击第一个单元格在里面写东西(出于某种原因,只需要点击一下就可以把光标放在里面。一个"ordinary" 单元格需要 2 个 - 一个用于焦点,一个 - 将光标放入其中)
第3步:我在里面写点东西(这个单元格还是有焦点的)
第 4 步: 我第一次单击第二个单元格(它只获得焦点)。
第 5 步: 我再次单击第二个单元格(光标在那里,默认值自动写入)。此时第一个单元格中的值消失了。
第 6 步: 我在第二个单元格中写下我的值:
第 7 步: 我按下键盘上的回车键,然后发生了这种情况
可能原因比较简单,但我觉得只用文字很难描述好。
列的 CellTemplate
应该包含一个只读的 TextBlock
。您应该将可编辑的 TextBox
放在 CellEditingTemplate
.
这就是内置 DataGridTextColumn
的工作原理。默认情况下,您会看到 TextBlock
,当您双击单元格进入编辑模式时,会出现 TextBox
。 TextBlock
的 Text
属性 和 TextBox
的 Text
属性 绑定到相同的来源 属性。