Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF文本框检测文本是否溢出_C#_Wpf - Fatal编程技术网

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;
    });
}