2016-09-16 11 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、私はすでにこれを試み、それは行いません。私が望むもの私はセル上を一度クリックするだけで、(DataGridTextColumnのように)TextBoxをすぐに編集するための入力を開始したいと考えています。また、入力中にエスケープキーを押すと元のテキストに戻ります。 DataGridTemplateColumnでは、まずセルをダブルクリックする必要があります.Escapeを押すと、元のテキストは復元されません。 – redcurry

1

私はあなたがDataGridTemplateColumnを使用したくない理由を私は従わわからないんだけど、あなたはまた、DataGridBoundColumnから派生したカスタムクラスを作り、GenerateElementGenerateEditingElementをオーバーライドするオプションがあります。自動生成列を使用している場合は、DataGridBoundColumnカスタムを作成するために、AutoGeneratingColumnイベントを処理して、使用する特定の列に対して適切な場合にも処理する必要があります。

また、私は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

Thanks、Peter、DataGridBoundColumnから派生させて、必要な処理を行う必要があり、DataGridTextColumnソースコードから多くのコードをコピーする必要があるかもしれません。私がAnjumSKhanへのコメントで述べたように、DataGridTemplateColumnは、選択されたセルの入力を自動的に開始することを許可していません。編集モードにするためには、セルをダブルクリックする必要があります。これは私が望むものではありません。 – redcurry

+0

ああ、そうだ。私はそれを複製しようとしなかったが、私は似たようなことに直面したので驚くことではない。上記の私の編集方法を参照してください。うまくいけば、それは多くのロジックを再発明しなければならなくても、あなたのために働くでしょう。 –

+0

これは私が望むものに近いが、それほどではない。私は実際には、セルをクリックすると編集モードに入ることを望んでいません。私はそれが現在のセルに入力を開始するときに編集モードに入るようにします。次に、Escキーを押すと、入力した内容を元に戻して元のテキストを復元することができます。あなたのソリューションは将来私にとって有用かもしれませんが、ありがとうございます。 – redcurry

関連する問題