2012-05-17 3 views
1

datagridcell을 항상 편집 모드로 유지해야합니다. 난 컨트롤 템플릿을 사용하여 DataGrid 셀에서 TextBox를 가져갈 수 있도록 DataGrid 셀 편집 모드를 만드는 옵션을 찾지 못했습니다.WPF dataGgridCell 편집 모드

텍스트 상자에 쓸 수 있지만 DataGrid 셀 내용이 업데이트되지 않습니다. 어떻게하면 텍스트 상자에 글을 써서 DataGrid 셀 내용을 업데이트 할 수 있습니까? 디

답변

2

당신이 DataGridCell.IsEditing Property를 시도

<Style TargetType="{x:Type DataGridCell}" x:Key="DatagridCellWithTextbox"> 
      <Setter Property="BorderThickness" Value="2"></Setter> 
      <Setter Property="Foreground" Value="{DynamicResource ContentNormalBrush}"/> 
      <Setter Property="Margin" Value="0"></Setter> 
      <Setter Property="VerticalContentAlignment" Value="Center"></Setter> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type DataGridCell}"> 
         <Grid Background="{TemplateBinding Background}"> 
          <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
          <TextBox x:Name="txtCell" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text}" VerticalContentAlignment="Top" Focusable="True" /> 
          </Border> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      </Style> 

감사 : 여기 스타일은?

<Style TargetType="{x:Type DataGridCell}"> 
    <Setter Property="IsEditing" Value="True" /> 
</Style> 

편집 :

당신은 TrueDataGrid.CellEditEnding EventCancel 속성을 설정 편집 모드로 유지할 수 있습니다.

<DataGrid CellEditEnding="DataGrid_CellEditEnding" 

.

private void DataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) 
{ 
    e.Cancel = true; 
} 
+0

편집을 시도했지만 수정하지 않은 모드로 되돌아갑니다. 항상 편집 모드로 유지하려고합니다. – Dee

+0

처음에는 스타일 설정기를 복원하겠다고 생각 했었습니다. 아마도 스타일 트리거를 사용하여 항상 트리거를 수행 할 수 있었지만 편집 할 때는 새로운 제안을 시도해보십시오. – LPL

0

나는이 질문이 오래된 것을 알고 있지만 최근 내 자신의 솔루션을 개발했습니다.

내가 할 모든 DataGridTextColumn에서 상속과 GenerateElement 방법 오버라이드 (override)되어

public class EditingTextBoxColumn : DataGridTextColumn 
{ 
    protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem) 
    { 
     var textbox = base.GenerateEditingElement(cell, dataItem) as TextBox; 
     textbox.IsReadOnly = IsReadOnly; 
     return textbox; 
    } 
} 

이 열 aswell 다른 유형의 작동합니다. 물론 이것은 이미 존재하는 DataGridColumn 유형에만 적용됩니다 (DataGridTextColumn, DataGridComboBoxColumn 등 ...).