我如何添加一个控件(像一个图标)到DataGridTextColumn
本文关键字:一个 图标 DataGridTextColumn 控件 何添加 添加 | 更新日期: 2023-09-27 18:07:30
我想添加一个图标到DataGridTextColumn
单元格,使其出现在TextBox
旁边。我知道我可以使用DataGridTemplateColumn
来做到这一点,但是我失去了DataGridTextColumn
的所有好处。例如,DataGridTextColumn
在我开始输入时立即进入编辑模式,并且知道按Esc应该恢复原始值。
我不确定我遵循为什么你不想使用DataGridTemplateColumn
,但是你也可以选择从DataGridBoundColumn
派生自定义类并覆盖GenerateElement
和GenerateEditingElement
。如果您使用的是自动生成的列,那么您还需要处理AutoGeneratingColumn
事件,以便在合适的时候为您想要使用它的特定列创建自定义的DataGridBoundColumn
。
但是再一次,我认为AnjumSKhan是对的,如果你想做的是在文本框旁边显示一个图像,那么DataGridTemplateColumn
应该足以满足你的需求。我唯一需要使用自定义DataGridBoundColumn
的情况是,当我需要特殊行为时,我无法通过XAML模板轻松完成。这种情况很少发生。
编辑:关于单元格不进入编辑模式的问题,当你点击它,我实际上面临着一个类似的问题,当使用自定义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
:
private void DataGridCell_GotFocus(object sender, RoutedEventArgs e)
{
this._MyDataGrid.BeginEdit();
}
-
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
键功能