问完这个问题后,我意识到也许我应该问一个更笼统的问题。所以,这里是:
在 WPF 中,我正在创建一个自定义面板派生控件。对于该控件,我想添加水平和垂直滚动条并自己控制它们(获取并设置 min/max/value/pagesize)。我怎样才能做到这一点?
这是我第一次接触WPF,我对模板和样式还不熟悉,所以我不知道答案是在那里还是其他地方。
问完这个问题后,我意识到也许我应该问一个更笼统的问题。所以,这里是:
在 WPF 中,我正在创建一个自定义面板派生控件。对于该控件,我想添加水平和垂直滚动条并自己控制它们(获取并设置 min/max/value/pagesize)。我怎样才能做到这一点?
这是我第一次接触WPF,我对模板和样式还不熟悉,所以我不知道答案是在那里还是其他地方。
好的,我找到了!三个简单的步骤:
System.Windows.Controls.Primitives.IScrollInfo
在您的自定义控件上实施;ScrollViewer
;CanContentScroll
属性设置ScrollViewer
为True
。瞧!
是的。答案不在 Panel 中,而在ScrollViewer中。您的面板不应该关心滚动条。让 ScrollViewer 测量和排列您的面板。因此,您的视觉树将首先包含 ScrollViewer,然后是您的面板:
<ScrollViewer>
<cc:YourPanel/>
</ScrollViewer>
如果你想控制 ScrollViewer,你可能想要继承它或者自定义它的模板。
The Scroll Viewer needs to be in the template, around the border in the default setup:
<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>