C# WPF文本框检测文本是否溢出
我尝试检测文本框是否溢出。我使用的代码如下:C# WPF文本框检测文本是否溢出,c#,wpf,C#,Wpf,我尝试检测文本框是否溢出。我使用的代码如下: textbox.UpdateLayout; textbox.ExtentWidth > textbox.ViewportWidth 我在以下事件处理程序中使用它: Loaded TextChanged TargetChanged (绑定使用的是NotifyOnTargetUpdated=True和UpdateSourceTrigger=PropertyChanged,IsAsync=False) 这个很好用。只有一个例外。如果文本框开始溢
textbox.UpdateLayout;
textbox.ExtentWidth > textbox.ViewportWidth
我在以下事件处理程序中使用它:
Loaded
TextChanged
TargetChanged
(绑定使用的是NotifyOnTargetUpdated=True
和UpdateSourceTrigger=PropertyChanged
,IsAsync=False
)
这个很好用。只有一个例外。如果文本框开始溢出,则不会检测到它。如果Textbox.Text
使用绑定,则即使在TargetChanged
事件处理程序中,extendwidth也为零。如果它是一些纯文本,如“123”
,则会得到正确的值。我错过了什么
谢谢。应该能用
TextBoxBase.TextChanged
有时行为与预期不同。某些内部操作在文本更改后执行,例如插入符号定位或测量。测量将影响TextBoxBase.ExtendWidth
和TextBoxBase.ViewportWidth
解决方案是推迟所有自定义操作,这些操作将由TextChanged
事件触发。自定义代码应在文本框的所有内部操作完成后执行。
您可以通过将代码异步排队到调度程序队列来延迟代码执行。异步调度程序操作在所有当前调度程序操作完成后执行:
private void TextBoxBase_OnTextChanged(object sender, TextChangedEventArgs e)
{
this.Dispatcher.InvokeAsync(
() =>
{
var textBox = sender as TextBox;
bool textBoxHasOverflowContent = textBox.ExtentWidth > textBox.ViewportWidth;
});
}