Enterキー のみの場合はセルの編集を確定し、Shift + Enterキー で改行を入力できるようにします。
ここでは、DataGrid の列の自動生成を有効にするので、テキストを編集するセルのスタイルは、DataGridTextColumn の EditingElementStyle プロパティで指定できます。
このスタイルの KeyDown イベントに editingTextBox_KeyDown メソッドを登録しておきます。
editingTextBox_KeyDown メソッドは、押されたキーが Shift + Enterキーの場合は、テキストカーソルのところに改行を挿入します。
MainWindow.xaml
<Window x:Class="DataGridTest.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="450">
<Window.Resources>
<Style TargetType="TextBox" x:Key="editingTextBoxStyle">
<EventSetter Event="KeyDown" Handler="editingTextBox_KeyDown" />
</Style>
</Window.Resources>
<DataGrid Grid.Row="1" Name="dataGrid"
CanUserAddRows="False" CanUserDeleteRows="False"
AutoGeneratingColumn="dataGrid_AutoGeneratingColumn"/>
</Window>
MainWindow.xaml.cs
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace DataGridTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataTable dt = new DataTable();
dt.Columns.Add();
dt.Columns.Add();
dt.Columns.Add();
dt.Rows.Add("走れメロス", "太宰治", "メロスは激怒した。");
dt.Rows.Add("斜陽", "太宰治", "朝、食堂でスウプを一さじ、");
this.dataGrid.ItemsSource = dt.DefaultView;
}
private void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
((DataGridTextColumn)e.Column).EditingElementStyle = (Style)this.Resources["editingTextBoxStyle"];
}
private void editingTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (Key.Return == e.Key && 0 < (ModifierKeys.Shift & e.KeyboardDevice.Modifiers))
{
TextBox tb = (TextBox)sender;
int caret = tb.CaretIndex;
tb.Text = tb.Text.Insert(caret, "\r\n");
tb.CaretIndex = caret + 1;
e.Handled = true;
}
}
}
}
0 件のコメント:
コメントを投稿