Эта проблема возникает только на Vista и XP. Происходит следующее: если текстовое поле содержит много текста и частично находится за пределами экрана, и вы щелкаете по нему, wpf прокручивает его в поле зрения и выделяет текст, пока он делает это. В Windows 7 он не будет прокручивать его в поле зрения. Я использую .net 4 и попытался очистить выделение полученного фокуса текстового поля, фокуса клавиатуры и событий захвата мыши, но после них прокрутка, кажется, происходит. Я включил несколько снимков экрана, о которых я говорю, а также тестовое приложение, которое демонстрирует проблему.
Прежде чем нажать на что-либо, на следующем снимке экрана все, что я сделал, это щелкнул по строке 6
![Before](https://i.stack.imgur.com/lNmSG.png)
После нажатия на строку 6 вы можете видеть, что все выделено, поскольку оно прокручивало текстовое поле в поле зрения.
![after](https://i.stack.imgur.com/H5pCm.png)
репродукция:
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
for (int i = 1; i < 1000; i++)
{
textBox3.AppendText(string.Format("line {0}\r\n", i));
}
}
}
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" MaxHeight="350" MaxWidth="525">
<Grid>
<ScrollViewer>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Text="this is some text"></TextBox>
<TextBox Grid.Row="1" Text="this is some text"></TextBox>
<TextBox Grid.Row="2" ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto" AcceptsReturn="True"
x:Name="textBox3"></TextBox>
</Grid>
</ScrollViewer>
</Grid>
</Window>