2016-09-16 4 views
0

DataGridTextColumn 셀에 아이콘을 추가하여 TextBox 옆에 표시하고 싶습니다. 나는 이것을 수행하기 위해 DataGridTemplateColumn을 사용할 수 있지만, 나는 DataGridTextColumn의 모든 이점을 잃어버린다. 예를 들어 DataGridTextColumn은 타이핑을 시작하자마자 편집 모드로 들어가고 Esc 키를 누르면 원래의 값으로 복원해야한다는 것을 알고 있습니다.DataGridTextColumn에 아이콘과 같은 컨트롤을 추가하려면 어떻게해야합니까?

답변

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> 
    

그리고 당신도 여기 Escape 핵심 기능을 얻을.

+0

감사합니다, AnjumSKhan,하지만 난 이미이 시도하고하지 않습니다 내가 원하는거야. 한 번 셀을 클릭하고 입력을 시작하여 TextBox를 바로 편집 할 수 있기를 원합니다 (DataGridTextColumn과 비슷 함). 또한 입력하는 동안 Esc 키를 누르면 원래 텍스트가 복원됩니다. DataGridTemplateColumn을 사용하면 먼저 셀을 두 번 클릭해야하며 Esc 키를 누르면 원본 텍스트가 복원되지 않습니다. – redcurry

1

난 당신이 DataGridTemplateColumn을 사용하지 않으려는 이유는 다음과 확실하지 않다, 그러나 당신은 또한 DataGridBoundColumn 및 최우선 GenerateElementGenerateEditingElement에서 파생 된 사용자 정의 클래스를 작성하는 옵션이 있습니다. 자동 생성 된 열을 사용하는 경우 이벤트를 처리하여 사용하려는 특정 열에 맞게 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(); 
    } 
+0

감사합니다, Peter, DataGridBoundColumn에서 파생시켜 원하는 작업을 수행하고 DataGridTextColumn 소스 코드에서 많은 코드를 복사해야 할 수도 있습니다. AnjumSKhan에 대한 내 의견에서 말했듯이, DataGridTemplateColumn은 선택된 셀에 타이핑을 시작하여 TextBox 편집을 자동으로 시작하지 못하게합니다. 편집 모드로 전환하려면 셀을 두 번 클릭해야하며 원하는 것은 아닙니다. – redcurry

+0

아, 알겠습니다. 나는 그것을 복제하려하지 않았지만 나는 비슷한 것을 직면했기 때문에 놀랄 일이 아니다. 내가 어떻게 처리했는지 위의 편집을 참조하십시오. 잘하면 그것은 많은 논리를 다시 발명해야하는 것보다 당신을 위해 일할 수 있기를 바랍니다. –

+0

이것은 내가 원하는 바에 가깝지 만별로는 아니다. 실제로 셀을 클릭하면 편집 모드로 들어가기를 원하지 않습니다. 현재 셀에 타이핑을 시작할 때 편집 모드로 들어가기를 원합니다. 그런 다음 Esc 키를 누르면 입력 한 내용을 실행 취소하고 원래 텍스트를 복원합니다. 귀하의 솔루션은 나에게 유용 할 것입니다.하지만 감사합니다. – redcurry

관련 문제