2010-05-25 62 views

回答

1

我根据您在评论中的说明更新了我的答案。您可以为单元格自己设置模板。以下是年龄列使用文本块的示例。

XAML:

<Window x:Class="GridTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:Controls="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" 
    Height="300" Width="300"> 
    <StackPanel> 
     <Controls:DataGrid Name="dataGrid" AutoGenerateColumns="False" > 
      <Controls:DataGrid.Columns> 
       <Controls:DataGridTextColumn 
        Header="Name" 
        Binding="{Binding Path=Name}" /> 
       <Controls:DataGridTemplateColumn Header="Age"> 
        <Controls:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding Path=Age}" /> 
         </DataTemplate> 
        </Controls:DataGridTemplateColumn.CellTemplate> 
        <Controls:DataGridTemplateColumn.CellEditingTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding Path=Age}" /> 
         </DataTemplate> 
        </Controls:DataGridTemplateColumn.CellEditingTemplate> 
       </Controls:DataGridTemplateColumn> 
      </Controls:DataGrid.Columns> 
     </Controls:DataGrid> 
    </StackPanel> 
</Window> 

后面的代码:

using System; 
using System.Collections.Generic; 
using System.Windows; 

namespace GridTest 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      dataGrid.ItemsSource = new List<Person>(
       new Person[] 
       { 
        new Person("Bob", 30), 
        new Person("Sally", 24), 
        new Person("Joe", 17) 
       }); 
     } 
    } 

    public class Person 
    { 
     public String Name { get; set; } 
     public int Age { get; set; } 

     public Person(String name, int age) 
     { 
      Name = name; 
      Age = age; 
     } 
    } 
} 
+1

不,我是说,datagridtextcolumn是多态。第一个状态是标签。点击标签可启用数据输入。失去焦点将它切换回标签。编辑特定行时,您只能看到文本框 - 我总是希望看到texbox – 2010-05-25 18:13:33