Как добавить полосу прокрутки в окно на C#

#c# #wpf #window #vertical-scrolling

#c# #wpf #окно #вертикальная прокрутка

Вопрос:

Я создал окно следующим образом:

 Window myWindow = new Window();
  

Как я могу добавить вертикальную полосу прокрутки в это Windows и сделать полосу прокрутки видимой, только если высота недостаточно велика, чтобы показать все элементы.

Ответ №1:

Вы могли бы добавить элемент ScrollViewer в свое окно и поместить необходимые элементы управления в элемент управления ScrollViewer.

 <ScrollViewer VerticalScrollBarVisibility="Auto">
    ...
</ScrollViewer>
  

Или, если вы хотите закодировать это в файле с исходным кодом, вы могли бы написать

 ScrollViewer viewer = new ScrollViewer();
viewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
// append scroll viewer to window
  

Ответ №2:

Вы не можете добавить полосу прокрутки в само окно. Вы можете добавлять полосы прокрутки только к элементам управления. Т.Е. к сетке внутри вашего окна.

Пример:

 <Grid  ScrollViewer.CanContentScroll="True"
       ScrollViewer.HorizontalScrollBarVisibility="Auto">
   ...
</Grid>
  

Редактировать:

Только что понял, что Window также имеет свойство ScrollViewer. Я не уверен, как это свойство работает для окна и как такое окно будет выглядеть. Попробовал, но полосы прокрутки не отображаются.

ПРАВКА 2:

 ScrollViewer sv = new ScrollViewer();
sv.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
myGrid.Children.Add(sv);
  

Комментарии:

1. Спасибо за ответ. Вместо того, чтобы создавать сетку с помощью XAML, я создал ее, программно используя usig Grid. Какие свойства сетки мне установить, чтобы получить полосу прокрутки?

2. У меня нет свойства ScrollViewer. Какую версию .NET вы используете?

3. @Gunner — Я использую .NET 3.5 SP1. Средство просмотра прокрутки находится в системе. Windows. Элементы управления. ScrollViewer

Ответ №3:

попробуйте это

 var xpage = your user control or page to which scroll bar need to be added at runtime

            xpage.SetValue(ScrollViewer.CanContentScrollProperty, true);
            xpage.SetValue(ScrollViewer.HorizontalScrollBarVisibilityProperty, ScrollBarVisibility.Auto);
            xpage.SetValue(ScrollViewer.VerticalScrollBarVisibilityProperty, ScrollBarVisibility.Auto);

            var scrollViewer = xpage.Content as ScrollViewer;
            if (scrollViewer != null)
            {
                var content = scrollViewer.Content;
                scrollViewer.Content = null;
                xpage.Content = content;
            }
            else
            {
                var content = xpage.Content;
                xpage.Content = null;
                xpage.Content = new ScrollViewer { Content = content };
            }