none
请问如何为WPF自定义面板添加滚动条 RRS feed

  • 问题

  • 问题如下:我继承Panel类制作了一个自定义面板,有一部分由于尺寸问题无法显示,所以想添加一个可滚动区域,但在添加了ScrollViewer后却没有任何效果,所以想请教下WPF自定义面板要添加滚动区域该如何实现?
    2014年4月22日 14:00

答案

  • 你好,

    我想你可以这样来操作,在XAML代码中添加自定义的Panel,然后按照我给的第一段代码增加滚动条。

    例如:C#代码:

        public class CustomPanel: Panel
        {
            //...
        }

    XAML代码:

    <Window x:Class="CustomPanelScrollViewerApp.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:CustomPanelScrollViewerApp"
            Title="MainWindow" Height="150" Width="525">
        <ScrollViewer VerticalScrollBarVisibility="Auto">
            <local:CustomPanel>
                <!--.....-->
            </local:CustomPanel>
        </ScrollViewer>
    </Window>

    这里有两个类似帖子,建议参考下:

    http://stackoverflow.com/questions/3978839/problem-with-custom-scrolling-in-custom-panel

    http://social.msdn.microsoft.com/Forums/en-US/0ae97bc3-2d05-4f84-b3ff-25f2bfbe6c97/can-any-wpf-panel-has-a-scroll-bar?forum=wpf

    另外如果这些内容都不能帮助到你,建议贴出关于这个自定义Panel的代码,这样也便于分析问题。

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年4月23日 8:16
    版主

全部回复

  • 你好,

    一般情况下,可以这样添加:

    <CustomPanel>
       <ScrollViewer VerticalScrollBarVisibility="Auto">
           <StackPanel />
       </ScrollViewer >
    </CustomPanel>

    如果不可以,建议贴一下你的自定义Panel代码。

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年4月23日 2:36
    版主
  • 感谢您的答复,我编写的自定义面板没有XAML的前台结构,只是重写了MeasureOverride和ArrangeOverride函数进行子元素的定位与放置,这样的情况是还需要为这个自定义面板添加一个Template吗?
    2014年4月23日 5:12
  • 是的。需要添加。
    2014年4月23日 5:15
  • 您好,刚才尝试了一下,Panel类是没有Template属性的,请问该怎么办?
    2014年4月23日 7:44
  • 你好,

    我想你可以这样来操作,在XAML代码中添加自定义的Panel,然后按照我给的第一段代码增加滚动条。

    例如:C#代码:

        public class CustomPanel: Panel
        {
            //...
        }

    XAML代码:

    <Window x:Class="CustomPanelScrollViewerApp.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:CustomPanelScrollViewerApp"
            Title="MainWindow" Height="150" Width="525">
        <ScrollViewer VerticalScrollBarVisibility="Auto">
            <local:CustomPanel>
                <!--.....-->
            </local:CustomPanel>
        </ScrollViewer>
    </Window>

    这里有两个类似帖子,建议参考下:

    http://stackoverflow.com/questions/3978839/problem-with-custom-scrolling-in-custom-panel

    http://social.msdn.microsoft.com/Forums/en-US/0ae97bc3-2d05-4f84-b3ff-25f2bfbe6c97/can-any-wpf-panel-has-a-scroll-bar?forum=wpf

    另外如果这些内容都不能帮助到你,建议贴出关于这个自定义Panel的代码,这样也便于分析问题。

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年4月23日 8:16
    版主
  • 非常感谢您的回答。
    2014年4月23日 8:53