如何在WPF中将滚动条添加到自定义控件?

时间:2009-08-31 13:44:47

标签: c# .net wpf scrollbars

在问this question之后,我意识到也许我应该问一个更通用的问题。所以,这里是:

在WPF中,我正在创建一个自定义的Panel派生控件。对于该控件,我想添加水平和垂直滚动条并自己控制它们(获取和设置min / max / value / pagesize)。我怎么能这样做?

这是我第一次遇到WPF,我还不熟悉模板和样式,所以我不知道答案是在那里还是其他地方。

3 个答案:

答案 0 :(得分:2)

好的,我找到了!三个简单的步骤:

  1. 在您的自定义控件上实施System.Windows.Controls.Primitives.IScrollInfo;
  2. 将自定义控件添加到ScrollViewer;
  3. CanContentScroll上的ScrollViewer属性设置为True
  4. 瞧!

答案 1 :(得分:1)

是。答案不在于小组,而在于ScrollViewer。您的小组不应该关注滚动条。让ScrollViewer测量并排列您的面板。因此,您的可视树将首先包含ScrollViewer,然后是您的面板:

    <ScrollViewer> 
      <cc:YourPanel/>
    </ScrollViewer>

如果您想控制ScrollViewer,您可能希望继承它或自定义其模板。

答案 2 :(得分:0)

滚动查看器需要位于模板中,默认设置中位于边框附近:

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type control:MyCustomControl}">
            <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
                <Border Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">                        
                    <ItemsPresenter />
                </Border>                        
            </ScrollViewer>
        </ControlTemplate>
    </Setter.Value>
</Setter>