WPF Scrollviewer缩小高度,将元素带入视图

时间:2017-05-17 18:12:23

标签: c# wpf

首先,标题可能没有多大意义。欢迎提出改变建议。

我点击TextBox内的ScrollViewer。当发生这种情况时,ScrollViewer将在高度上缩小(从下向上),它根本不会滚动,并且视口底部附近的一些控件会被遮盖(因为视口现在变小了)。如果TextBox被遮盖,我需要滚动以使其仍然可见。

我已经检查了几个SO问题,似乎没有人能解决我的问题。 This one很接近,但我没有画布可以使用。另外,根据我的具体情况,我无法使用Dispatcher等待用户界面加载,然后使用BringIntoView()

TextBox分享了一个事件,TextBox_GotFocus

TextBox_GotFocus(object sender, RoutedEventArgs e)
{
    myScrollViewer.Height = 400; //used to be 600

    //if sender was in the 401-600 range, bring it into view
}

如果在高度变化后现在隐藏了输入的ScrollViewer,如何滚动TextBox

1 个答案:

答案 0 :(得分:0)

不,谢谢随机的downvote,但我设法想出一个迂回的方式来做到这一点。

TextBox_GotFocus(object sender, RoutedEventArgs e)
{
    FrameworkElement element = sender as FrameworkElement;

    //Get the distance from the top and bottom of the ScrollViewer
    double offsetTop = element.TranslatePoint(new Point(), myScrollViewer).Y;
    double offsetBottom = myScrollViewer.Height - offsetTop;

    //Get total height needed to show the whole element
    double height = 200 + element.Height;

    //If the control would be hidden...
    if (offsetBottom < height)
    {
        //Scroll down the difference
        double change = myScrollViewer.VerticalOffset + (height - offsetBottom);
        myScrollViewer.ScrollToVerticalOffset(change);
    }

    myScrollViewer.Height = 400; //used to be 600
}