2013-02-07 81 views
0

我想爲每個wpf datagrid列添加一個按鈕。我的列是自動生成的,所以我沒有xaml中列的定義。我怎樣才能做到這一點與模板的列,以便我有我的列標題和右側的按鈕。每個WPF DataGrid列中的按鈕

編輯:

<DataGrid ItemsSource="{Binding User.myDataTable}" AutoGenerateColumns="True"> 
     <DataGrid.ColumnHeaderStyle> 
      <Style TargetType="DataGridColumnHeader"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="Here I want my ColumnName" /> 
           <Button Content="Button"/> 
          </StackPanel> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </DataGrid.ColumnHeaderStyle> 
    </DataGrid> 

的User.myDataTable填充在模型和工作正常。

回答

0

您可以透過這個使用風格:

<DataGrid> 
    <DataGrid.ColumnHeaderStyle> 
     <Style TargetType="DataGridColumnHeader"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock Text="{Binding ColumnName}" /> 
          <Button Content="Button" /> 
         </StackPanel> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </DataGrid.ColumnHeaderStyle> 
<DataGrid> 
+0

確定這效果很好,但我該怎麼辦綁定到我的列名?它們是自動創建的,我的數據網格的源代碼綁定到我的模型中的數據表中 – user2025830

+0

您能分享您的代碼嗎?這將是非常有益的。 – TrueEddie

+0

我已編輯文章 – user2025830

0
use the below code:- 

    DataGridTemplateColumn templateColumn = new DataGridTemplateColumn(); 

    FrameworkElementFactory HeaderStackpanel = new FrameworkElementFactory(typeof(StackPanel)); 
    FrameworkElementFactory btn = new FrameworkElementFactory(typeof(Button)); 
    // Set the property for Button 

    btn.SetValue(Button.MarginProperty, new Thickness(-50, 0, 0, 0)); 
    btn.AddHandler(Button.ClickEvent, new RoutedEventHandler(BtnClick)); 
    // Set the Text Value to the buttons 

    btn.SetValue(Button.ContentProperty, strEdit); 

    // Append the Edit Button 

    HeaderStackpanel.AppendChild(btn); 
    DataTemplate headerTemplate = new DataTemplate(); 
    headerTemplate.VisualTree = HeaderStackpanel; 

    templateColumn.HeaderTemplate = headerTemplate;