2009-11-18 18 views
11

私はWPFでDataGridを持っています。そして、それは特定のItemsSourceにバインドされた後、グリッドの特定のセルにButtonを追加しようとしています。私はこのようなXAMLでこれを行うことを試みた:datagridtemplatecolumnの背後にあるコードとその使い方は何ですか?

<dg:DataGridTemplateColumn x:Name="R1" CanUserReorder="False" IsReadOnly="False">    
    <dg:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <awc:ImageButton Content="Edit" Name="btnEdit" Visibility="Collapsed"/> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellTemplate> 
</dg:DataGridTemplateColumn> 

しかし、私は背後にあるコードでこれを行うことができます方法についての知りたいです。私は、特定のクリックが起きたときでも、Buttonを置くことができるように、これが必要です。どんな助力も高く評価されます。

答えて

22

使用この:

DataGridTemplateColumn col1 = new DataGridTemplateColumn(); 
col1.Header = "MyHeader"; 
FrameworkElementFactory factory1 = new FrameworkElementFactory(typeof(CheckBox)); 
Binding b1 = new Binding("IsSelected"); 
b1.Mode = BindingMode.TwoWay; 
factory1.SetValue(CheckBox.IsCheckedProperty, b1); 
factory1.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(chkSelect_Checked)); 
DataTemplate cellTemplate1 = new DataTemplate(); 
cellTemplate1.VisualTree = factory1; 
col1.CellTemplate = cellTemplate1; 
dgTransportReqsts.DataGrid.Columns.Add(col1); 

私は、実行時に私のDataGridTemplateColumnのチェックボックスを追加するために、これを使用していました。 これが役立つことを願っています!

+0

「FrameElementFactory(typeof(Button))」のボタンの場合は申し訳ありませんが、ボタンテキストを追加するにはどうすればよいですか?私はそうすることができませんでしたか、私は何かを逃していますか? –

+1

@Manish Sinha、use factory1.SetValue(Button。ContentProperty、b1);上記の例では、CheckBoxのIsCheckedプロパティを設定するのと同じ方法で、Buttonの任意のプロパティを設定することができます。 – viky

+0

甘い!そう簡単に!!どうもありがとう。 –

3

具体的にグリッドに列を追加する前にグリッドがインスタンス化される前に、ボタンを追加したい場合、Anuragの答えは非常にうまくいくでしょう。

グリッドが既に作成された後に、グリッドセルにボタンを追加する場合は、DataGridCellオブジェクトを変更してボタンを追加できます。まず、あなたがそれを見つけなければならない:

  1. これが完了するとDataGridCell

にビジュアルツリーをスキャンするために使用VisualTreeHelperDataGridColumn.GetCellContent

  • を使用してDataGridCellを検索し、追加するには、いくつかの方法がありますあなたが達成しようとしているものに応じて、DataGridCellのボタン:

    • セットDataGridCell.Template t OAのControlTemplate - または -
    • があなたのコラムのDataTemplateは、新しいボタンを保持するためのプレースホルダパネルが含ま持って、-OR-
    • は、ボタンを含むDataTemplateをし、あなたが望む他の項目にDataGridCell.ContentTemplate設定し、あなたが望むスタイリングボタンを含む、その他、このパネルのビジュアルツリーをNameで検索し、ボタンを追加します。

      1. があなたのDataTemplate
      2. には、ボタンを作成するための情報を提供し、あなたのビューモデルでObservableCollection<T>プロパティを含める:

    セルを見つける必要としない別のアプローチは、にありますItemsControlこのプロパティを参照し、の正しいボタンを作成できるT

  • ボタンを追加する場合は、0に項目を追加するだけですプロパティ
  • 関連する問題