如何将控件(如图标)添加到DataGridTextColumn?

时间:2016-09-16 22:02:18

标签: c# wpf

我想在DataGridTextColumn单元格中添加一个图标,使其显示在TextBox旁边。我知道我可以使用DataGridTemplateColumn来执行此操作,但我失去了DataGridTextColumn的所有好处。例如,一旦我开始输入,DataGridTextColumn就会进入编辑模式,并且知道按Esc会恢复原始值。

2 个答案:

答案 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)

    当您想要完全自定义时,会提供
  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>
    
  3. 您也可以在此处获得Escape关键功能。

相关问题