2010-05-25 6 views
2

По умолчанию WPat datagridtext отображается как метка и переходит в состояние редактирования при нажатии. Есть ли способ изменить столбец так, чтобы текстовое поле всегда отображалось (а не в зависимости от события клика)? Заранее спасибо, JPWPF datagridtextcolumn - всегда показывать текстовое поле

ответ

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 является Multistate. Первое состояние - это метка. Нажатие на метку позволяет вводить данные. Потеря фокуса переключает его обратно на метку. Вы видите только текстовое поле при редактировании определенной строки - я всегда хотел бы видеть тексбокс –