我想在DataGridTextColumn
单元格中添加一个图标,使其显示在TextBox
旁边。我知道我可以使用DataGridTemplateColumn
来执行此操作,但我失去了DataGridTextColumn
的所有好处。例如,一旦我开始输入,DataGridTextColumn
就会进入编辑模式,并且知道按Esc会恢复原始值。
答案 0 :(得分:1)
我不确定我是否遵循您不想使用DataGridTemplateColumn
的原因,但您也可以选择制作源自DataGridBoundColumn
的自定义类并覆盖{{ 1}}和GenerateElement
。如果您使用自动生成的列,则还需要处理GenerateEditingElement
事件,以便在适合您要将其用于的特定列时创建自定义AutoGeneratingColumn
。< / p>
但是,我认为AnjumSKhan是对的,DataGridBoundColumn
应该足以满足您的需求,如果您想要做的就是在文本框旁边显示图像。我需要使用自定义DataGridTemplateColumn
的唯一时间是我需要通过XAML模板轻松完成的特殊行为。这些情况很少见。
编辑:
关于单击时单元格未进入编辑模式的问题,我在使用自定义DataGridBoundColumn
模板时遇到了类似的问题。这对我有用(把它放在你的DataGridCell
资源中):
DataGrid
然后在处理程序 <Style x:Key="{x:Type DataGridCell}" TargetType="{x:Type DataGridCell}"
BasedOn="{StaticResource {x:Type DataGridCell}}">
<EventSetter Event="Control.GotFocus" Handler="DataGridCell_GotFocus"/>
</Style>
中:
DataGridCell_GotFocus
答案 1 :(得分:0)
DataGridTemplateColumn
。
同时提供CellTemplate
和CellEditingTemplate
。例如;
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<Image Source="..."/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding Name}"/>
<Image Source="..."/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
您也可以在此处获得Escape
关键功能。