テキストが追加されたときに最後まで自動スクロールするテキストボックスを作成しています。ただし、マウスがテキストボックスの上にあるときにテキストボックスをスクロールしないオプションが必要でした。私はそれをすべてやりましたが、ユーザーがテキストを選択し、テキストボックスがテキストを更新するイベントを受け取ると、すべてがうまくいきません。
これが私が取り組んでいるものです:
<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 イベントを受け取ると、コンテンツは更新されますが、ボックスは下にスクロールしません。これは予期されることです。問題は、カーソルが現在ある場所からテキストの上部に選択が移動することです。ボックスからカーソルを削除すると、問題なく続行されますが、カーソルが戻ると、ボックスが上部で動かなくなり、下にスクロールできなくなります。カーソルだったのではないかと思ったので、最後に移動しようとしましたが、何も解決しません。
何か案は?!
髪をかきあげてきました!ありがとう!