我想在我的ComboBox
按钮中使用DropDown
之类的滚动条,结构实际上就是这样:
<Controls:DropDownButton Content="Nazioni" Width="120" Margin="0, 0, 20, 0"
ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.CanContentScroll="True"
ItemsSource="{Binding Countries}"
ItemTemplate="{StaticResource CombinedTemplate}"/>
但是我没有看到任何ScrollViewer
,如下图所示:
答案 0 :(得分:1)
为确保滚动操作符合预期,您不能依赖WPF将ScrollViewer
置于应有的位置。
由于任何内容都可以放在下拉列表中,因此最好选择将ScrollViewer
直接放在组件上。
这样,您可以显式命名,并可以访问其属性。
如果您将国家/地区列表绑定到lstContent
框,则可以解决所有问题。
<extToolkit:DropDownButton Content="Click Me" Margin="15" >
<extToolkit:DropDownButton.DropDownContent>
<ScrollViewer>
<ListBox Name="lstContent" ItemsSource="{Binding Countries}" ItemTemplate="{StaticResource CombinedTemplate}"/>
</ScrollViewer>
</extToolkit:DropDownButton.DropDownContent>
</extToolkit:DropDownButton>
答案 1 :(得分:1)
DropDownButton
的下拉列表已包含ScrollViewer
(名为"SubMenuScrollViewer"
),因此可以开箱即用滚动浏览其项目。问题是,特定的ScrollViewer
的样式与默认的ScrollViewer
不同 - 假设我们正在讨论垂直滚动,它在列表的上方和下方有两个按钮,分别负责上下滚动,如下图所示:
因此,最好的办法是让特定ScrollViewer
使用默认样式而不是自定义样式。通过检查MahApps.Metro source code,我们可以看到有问题的ScrollViewer
被连接到使用密钥值为{ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}
的动态资源。所以你需要做的是为该控件提供一个默认样式:
<Controls:DropDownButton (...)>
<Controls:DropDownButton.Resources>
<Style x:Key="{ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}"
TargetType="{x:Type ScrollViewer}"
BasedOn="{StaticResource {x:Type ScrollViewer}}" />
</Controls.DropDownButton.Resources>
</Controls.DropDownButton>
这样,下拉列表中的ScrollViewer
将使用 MahApps.Metro 附带的默认样式设置样式。