#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 };
}