我如何添加一个控件(像一个图标)到DataGridTextColumn

本文关键字:一个 图标 DataGridTextColumn 控件 何添加 添加 | 更新日期: 2023-09-27 18:07:30

我想添加一个图标到DataGridTextColumn单元格,使其出现在TextBox旁边。我知道我可以使用DataGridTemplateColumn来做到这一点,但是我失去了DataGridTextColumn的所有好处。例如,DataGridTextColumn在我开始输入时立即进入编辑模式,并且知道按Esc应该恢复原始值。

我如何添加一个控件(像一个图标)到DataGridTextColumn

我不确定我遵循为什么你不想使用DataGridTemplateColumn,但是你也可以选择从DataGridBoundColumn派生自定义类并覆盖GenerateElementGenerateEditingElement。如果您使用的是自动生成的列,那么您还需要处理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();
    }
  1. DataGridTemplateColumn是在您需要完全定制时提供的。

  2. 同时提供CellTemplateCellEditingTemplate。例如,

      <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键功能