gpt4 book ai didi

c# - 如何更改 TextCompositionEventArgs 中的文本

转载 作者:太空狗 更新时间:2023-10-29 22:01:31 26 4
gpt4 key购买 nike

C# WPF - 我有一个自定义的可编辑数据网格,它使用我自己的从 DataGridTextColumn 继承的自定义列。在我的列类中,我覆盖了 GenerateEditingElement,以便我可以自动设置诸如 MaxLength、CharacterCasing 等内容。

问题是,当用户突出显示一个单元格,然后键入他们的第一个字符时,数据网格会自动进入编辑模式。所以我的 GenerateEditingElement 触发了,我可以设置文本框。不幸的是,这对于字符大小写来说为时已晚,并且 TextCompositionEventArgs 中已经有一个小写字符。后续类型字符是正确的大小写。

接下来将触发列类 PrepareCellForEdit,它具有 TextCompositionEventArgs。但是,我似乎无法更改文本。我收到 setter 不可用的编译错误。 (即使该属性的 intellisense 帮助确实说了获取和设置)。

无论如何,我可以通过编程将我的 charactercasing 放入文本框中吗?或者如何更改 TextCompositionEventArgs 中的文本?

最佳答案

主要思想是订阅TextBox的TextChanged事件。但诀窍是您无法直接在此事件处理程序上更新 Text 属性。您必须使用一些小的延迟来执行此操作。这是可以正常工作的示例:

    public struct MyData
{
public string Name { set; get; }
}

public MainWindow()
{
InitializeComponent();
ObservableCollection<MyData> oc = new ObservableCollection<MyData> { new MyData(), new MyData() };
grid.ItemsSource = oc;
}

private void Grid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
var col = new DataGridTextColumn();
Style myStyle = new Style(typeof(TextBox));
// subsribe to TextChanged event
myStyle.Setters.Add(new EventSetter(TextBoxBase.TextChangedEvent, new TextChangedEventHandler(OnTextChanged)));
col.EditingElementStyle = myStyle;
var binding = new Binding("Name") {Mode = BindingMode.TwoWay};
col.Binding = binding;
e.Column = col;
}

private static void OnTextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = sender as TextBox;
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += Worker_DoWork;
worker.RunWorkerAsync(textBox);
worker.RunWorkerCompleted += Worker_RunWorkerCompleted;
}

static void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
TextBox textBox = e.Result as TextBox;
if (textBox != null)
{
textBox.Text = textBox.Text.ToUpper();
textBox.CaretIndex = textBox.Text.Length;
}
}

static void Worker_DoWork(object sender, DoWorkEventArgs e)
{
Thread.Sleep(1);// This is the trick :)
e.Result = e.Argument;
}

关于c# - 如何更改 TextCompositionEventArgs 中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9475283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com