我正在嘗試創建一種在編輯單元格時將文本預填充并選擇到 DataGrid 的文本單元格中的行為。行為如下:
public class AutoFillBehavior : Behavior<DataGrid>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.BeginningEdit = OnBeginEdit;
}
protected override void OnDetaching()
{
AssociatedObject.BeginningEdit -= OnBeginEdit;
base.OnDetaching();
}
private void OnBeginEdit(object sender, DataGridBeginningEditEventArgs e)
{
if (e.Column.Header.ToString() == "Name")
{
var grid = (sender as DataGrid);
var rowId = (grid.Columns[0].GetCellContent(e.Row) as TextBlock).Text;
string name = null;
DLL.FieldNames.TryGetValue(rowId, out name);
if (!string.IsNullOrWhitespace(name)) {
var rowData = (from IDataTable item in grid.Items
where item.Id == rowId
select item).First();
rowData.Name = name;
// Would like to select text in textbox here
}
}
}
}
我有填充正在編輯的單元格的部分,但是插入后如何選擇所有文本?我遇到的問題是當BeginningEdit 事件處于活動狀態時,當前單元格的內容是一個TextBlock。如果它是 TextBox,我可以輕松呼叫 .SelectAll() 方法。但是,根據 MSDN,DataGridTextColumn 中的單元格在編輯之前/之后是 TextBlock,在編輯期間是 TextBox。
uj5u.com熱心網友回復:
這應該有效:
public class AutoFillBehavior : Behavior<DataGrid>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.PreparingCellForEdit = OnPreparingCellForEdit;
}
protected override void OnDetaching()
{
AssociatedObject.PreparingCellForEdit -= OnPreparingCellForEdit;
base.OnDetaching();
}
private void OnPreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
if (e.Column.Header.ToString() == "Name")
{
//...
TextBox textBox = e.EditingElement as TextBox;
if (textBox != null)
{
textBox.Text = "...";
textBox.SelectAll();
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/527048.html
