Скроллбары WPF TextBox на самом деле видны или нет? - PullRequest
1 голос
/ 08 декабря 2011

У меня есть TextBox в проекте WPF, для которого видимость вертикальной полосы прокрутки установлена ​​на Авто. Когда я устанавливаю текст в нем во время выполнения, вертикальная полоса прокрутки становится видимой, когда текст больше, а вертикальная полоса прокрутки скрывается, когда текст меньше.

То, что я хочу, - это если я назначу ему большой текст (и вертикальная полоса прокрутки станет видимой), то я выполню рекурсивный цикл, который уменьшит размер шрифта до уровня, пока полоса прокрутки не станет скрытой. Я хочу получить фактическое значение видимости вертикальной полосы прокрутки.

В коде за свойством verticalscrollbarvisibility всегда отображается значение auto. (я думаю, что в XAML установлено значение auto).

// Если мой подход неверен для этой проблемы, пожалуйста, дайте мне знать об этом.

1 Ответ

4 голосов
/ 12 декабря 2011

Я нашел это. Я передал текстовое поле в функции

ScrollViewer sv = FindVisualChild<ScrollViewer>(mytextbox);
if (sv != null)
{
    // do something with ScrollViewer
}

public static T FindVisualChild<T>(DependencyObject depObj) where T : DependencyObject
{
    if (depObj != null)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
            if (child != null && child is T)
            {
                return (T)child;
            }

            T childItem = FindVisualChild<T>(child);
            if (childItem != null) return childItem;
        }
    }
    return null;
}

Он возвращает мне ScrollViewer, свойство видимости которого является тем, что я хотел.

...