Как остановить переход TextBox на новую позицию из-за нежелательной прокрутки в ScrollViewer - PullRequest
0 голосов
/ 14 марта 2012

У меня есть холст на сетке внутри ScrollViewer.Когда 3 инструкции mycanvas.Children.Add (какой бы элемент мне ни понравился), за которыми следуют Canvas.SetLeft (weif, ptMouse.X) и Canvas.SetTop (weif, ptMouse.Y), соответствующий элемент заканчивается на Canvas, гдедолжно, кроме случаев, когда элемент является TextBox.Во всех случаях часть холста находится за пределами экрана (вне области просмотра), и я только прикрепляю небольшие объекты, которые хорошо вписываются в область просмотра, но когда я присоединяю TextBox, полосы прокрутки ScrollViewer неизменно немного смещаются и, таким образом, вызывают TextBoxчтобы быть позиционированным со смещением к точке щелчка мыши.Если я переместу полосы прокрутки обратно в прежнее положение, TextBox будет расположен в точке, по которой щелкнули.Событие прокрутки происходит, когда я добавляю TextBox на холст, но не когда я добавляю изображение или TextBlock того же размера в ту же позицию на холсте.Что я делаю неправильно.Заранее спасибо.

void mycanv_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Canvas acanvas = sender as Canvas;
            ptMouse = e.GetPosition(acanvas);
...
case ToolType.InsertText:

                        mytbox = new TextBox();
                        mytbox.FontSize = (double)cbFontSize.SelectedItem;
                        mytbox.FontFamily = (FontFamily)cbFontFamily.SelectedItem;
                        mytbox.Background = Brushes.Transparent;
                        mytbox.Foreground = (Brush)mypl.Fill;
                        mytbox.BorderThickness = new Thickness(1);
                        mytbox.TextWrapping = TextWrapping.Wrap;
                        isDrawingTextBox = true;
                        acanvas.Children.Add(mytbox); 
                        Canvas.SetLeft(mytbox, ptMouse.X);
                        Canvas.SetTop(mytbox, ptMouse.Y);
...