我正在制作一个文本框以在添加文本时自动滚动到末尾。但是,当鼠标悬停在文本框上时,我希望选择不滚动文本框。我已经完成了所有这些,但是当用户选择文本并且文本框接收到更新文本的事件时,一切都变得混乱了。
这是我正在使用的:
<TextBox Text="{Binding ConsoleContents, Mode=OneWay}" TextWrapping="Wrap"
IsReadOnly="True" ScrollViewer.VerticalScrollBarVisibility="Visible"
TextChanged="TextBox_TextChanged" MouseEnter="TextBox_MouseEnterLeave"
MouseLeave="TextBox_MouseEnterLeave" AllowDrop="False" Focusable="True"
IsUndoEnabled="False"></TextBox>
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = sender as TextBox;
if (textBox == null) return;
// ensure we can scroll
if (_canScroll)
{
textBox.Select(textBox.Text.Length, 0); //This was an attempt to fix the issue
textBox.ScrollToEnd();
}
}
private void TextBox_MouseEnterLeave(object sender, MouseEventArgs e)
{
TextBox textBox = sender as TextBox;
// Don't scroll if the mouse is in the box
if (e.RoutedEvent.Name == "MouseEnter")
{
_canScroll = false;
}
else if (e.RoutedEvent.Name == "MouseLeave")
{
_canScroll = true;
}
}
为了进一步解释 haywire 的含义,当文本框接收到 propertychanged 事件时,它会设置文本并在鼠标未悬停在其上时向下滚动到末尾。如果鼠标悬停在它上面不会滚动。但是,如果我选择文本并且文本框接收到 propertychanged 事件,则内容会更新,但该框不会向下滚动。这是意料之中的。问题是我的选择然后从光标当前所在的位置转到文本的顶部。如果我从框中删除光标,它会继续正常,但是一旦光标返回,框就会卡在顶部并且无法向下滚动。我认为它可能是光标,所以我尝试将它移到最后,但这没有解决任何问题。
有任何想法吗?!
我一直在扯头发!谢谢!