C# 如何在WPF中向自定义控件添加滚动条?

C# 如何在WPF中向自定义控件添加滚动条?,c#,.net,wpf,scrollbars,C#,.net,Wpf,Scrollbars,问了之后,我意识到也许我应该问一个更一般的问题。下面是: 在WPF中,我创建了一个自定义面板派生控件。对于该控件,我想添加水平和垂直滚动条,并自己控制它们(获取和设置min/max/value/pagesize)。我该怎么做 这是我第一次接触WPF,我还不熟悉模板和样式,所以我不知道答案是在那里还是其他地方。是的。答案不在于小组,而在于小组。您的面板不应该关注滚动条。让ScrollViewer测量并排列面板。因此,视觉树将首先包括ScrollViewer,然后是面板: <Scrol

问了之后,我意识到也许我应该问一个更一般的问题。下面是:

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


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

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

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


如果您想要控制ScrollViewer,您可能需要从它继承或自定义它的模板

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

  • 在自定义控件上实现
    System.Windows.Controls.Primitives.IScrollInfo
  • 将自定义控件添加到
    滚动查看器
  • ScrollViewer
    上的
    CanContentScroll
    属性设置为
    True

  • 在默认设置中,滚动查看器需要位于模板中的边框周围:

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

    问题是-我的控件可能无法更改其大小。ScrollViewer基于检查子控件的大小。