C# 如何在C中向窗口添加滚动条#

C# 如何在C中向窗口添加滚动条#,c#,wpf,window,vertical-scrolling,C#,Wpf,Window,Vertical Scrolling,我创建了一个窗口,如下所示: Window myWindow = new Window(); 如何将垂直滚动条添加到此窗口,并使滚动条仅在高度不足以显示所有元素时可见。无法将滚动条添加到窗口本身。只能向控件添加滚动条。也就是说,你的窗户里面有一个格子 例如: <Grid ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Auto"> ... <

我创建了一个窗口,如下所示:

Window myWindow = new Window();

如何将垂直滚动条添加到此窗口,并使滚动条仅在高度不足以显示所有元素时可见。

无法将滚动条添加到窗口本身。只能向控件添加滚动条。也就是说,你的窗户里面有一个格子

例如:

<Grid  ScrollViewer.CanContentScroll="True"
       ScrollViewer.HorizontalScrollBarVisibility="Auto">
   ...
</Grid>
您可以向窗口中添加一个元素,并将必要的控件放入ScrollViewer控件中

试试这个

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

谢谢你的回复。我没有使用XAML创建网格,而是使用Grid编程创建了它。我应该设置网格的哪些属性来获取滚动条?我没有ScrollViewer属性。你用的是什么版本的.NET?@Gunner-我用的是.NET3.5SP1。ScrollViewer位于System.Windows.Controls.ScrollViewer中
<ScrollViewer VerticalScrollBarVisibility="Auto">
    ...
</ScrollViewer>
ScrollViewer viewer = new ScrollViewer();
viewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
// append scroll viewer to window
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 };
            }