2009-11-18 15 views
11

WPF'de DataGrid var. Ve belirli bir ItemsSource'a bağlı olduktan sonra, ızgaranın belirli hücrelerine Button s eklemeye çalışıyorum. Böyle xaml bunu çalıştık:Datagridtemplatecolumn için arkasındaki kod nedir ve nasıl kullanılır?

<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> 

Ancak, ben kodda bunu nasıl olarak bilmek istiyorum. Belirli bir tıklama bile gerçekleştiğinde Button s yerleştirmek için buna ihtiyacım var. Herhangi bir yardım çok takdir edilecektir.

cevap

22

kullanımı bu:

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); 

Ben zamanında benim DataGridTemplateColumn içinde CheckBox eklemek için bu kullanılır. Umut bu yardımcı olur! Eğer kılavuza sütun eklemek özellikle önce ızgara örneği önce düğmeleri eklemek istiyorsanız Süre Anurag cevabı sizin için çok iyi çalışacak

+0

eski iplik darbeleme için üzgünüm ama FrameworkElementFactory 'de Düğme durumunda (typeof (Düğme))', nasıl Düğme Metin eklerim? Bunu yapamadım mı, yoksa bir şey mi özlüyorum? –

+1

@Manish Sinha, factory1.SetValue (Düğme) kullanın.ContentProperty, b1); Yukarıdaki örnekte CheckBox'ın IsChecked özelliğini ayarlamama benzer şekilde, Button'ınızın herhangi bir özelliğini de ayarlayabilirsiniz. – viky

+0

Sweet! Yani sadece! Çok teşekkürler. –

3

.

Kılavuz zaten oluşturulduktan sonra ızgara hücresine hücresine eklemek isterseniz, bunu DataGridCell nesnesinde değişiklikler yaparak yapabilirsiniz. Öncelikle bunu bulmak zorunda:

  1. Bu yapıldıktan sonra DataGridCell

görsel ağaca tarama DataGridColumn.GetCellContent

  • kullanın VisualTreeHelper kullanarak DataGridCell bul, eklemenin birkaç yolu vardır DataGridCell için bir düğme, size ulaşmak için çalışıyoruz ne bağlı:

    • de belirleyin DataGridCell.Template t oa ControlTemplate -VEYA-
    • sütun en DataTemplate yeni düğmeler tutmak için bir yer tutucu paneli içermektedir mı, -VEYA-
    • bir düğme içeren DataTemplate ve arzu diğer öğelere DataGridCell.ContentTemplate ayarlayın, istediğiniz stil düğmeler içeren ve diğer, Bu panelin görsel ağacını Name'a göre arayın ve düğmeyi ona ekleyin.

      1. sizin DataTemplate yılında
      2. bir içerme düğmeler oluşturmak için bilgi sağlayan görünümünüzü modelinde bir ObservableCollection<T> özelliğini ekleyin:

    hücreyi bulma gerektirmeyen alternatif bir yaklaşım etmektir Bu özelliği başvurmak ve bir düğme eklemek istediğinizde tip T

  • dışarı doğru düğme oluşturabilirsiniz bir DataTemplate sahiptir ItemsControl, sadece 0 bir öğe eklemekmülkiyet