在ContextMenu.MenuItem DataTemplate中使用ScrollViewer

时间:2011-05-05 10:11:48

标签: windows-phone-7 contextmenu datatemplate silverlight-toolkit scrollviewer

我花了很多时间试图理解并实现一些看似简单的东西。

在我的WP7应用程序中,我有一个按钮,在长按后显示上下文菜单。由于此上下文菜单绑定到列表,因此项目数量可能很大。到目前为止,我还无法在数据模板周围添加滚动查看器。但我测试过,如果数据模板不存在,它应该可以正常工作。

这是我的XAML:

<toolkit:ContextMenuService.ContextMenu>
    <toolkit:ContextMenu ItemsSource="{Binding}">
       <toolkit:ContextMenu.ItemTemplate>
          <DataTemplate >
             <toolkit:MenuItem Header="{Binding Path=Name}" Click="MenuItem_Click"/>
           </DataTemplate>
        </toolkit:ContextMenu.ItemTemplate>
    </toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>

我尝试在标记<toolkit:ContextMenuService.ContextMenu>之前,标记<toolkit:ContextMenu ItemsSource="{Binding}">之前添加ScrollViewer,但是没有任何效果

我还尝试在我的标签中使用附加属性:

<toolkit:ContextMenu ItemsSource="{Binding}" ScrollViewer.VerticalScrollBarVisibility="Visible">

但它也不起作用。

但如果我使用如下数据模板:

<toolkit:ContextMenuService.ContextMenu>
    <toolkit:ContextMenu>
        <ScrollViewer>
            <stackPanel>
                <toolkit:MenuItem Header="Item1"/>
                <toolkit:MenuItem Header="Item2"/>
                <toolkit:MenuItem Header="Item3"/>
                <toolkit:MenuItem Header="Item4"/>
            </stackPanel>
        </ScrollViewer>
    </toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>

它工作正常。

我错过了什么吗?

1 个答案:

答案 0 :(得分:4)

您需要将ScrollViewer放在ItemsPanelTemplate中的Template和StackPanel中,如下所示:

<toolkit:ContextMenuService.ContextMenu>
    <toolkit:ContextMenu ItemsSource="{Binding}">
        <toolkit:ContextMenu.Template>
            <ControlTemplate TargetType="toolkit:ContextMenu">
                <Border>
                    <ScrollViewer>
                        <ItemsPresenter/>
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </toolkit:ContextMenu.Template>
        <toolkit:ContextMenu.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel />
            </ItemsPanelTemplate>
        </toolkit:ContextMenu.ItemsPanel>
        <toolkit:ContextMenu.ItemTemplate>
          <DataTemplate >
             <toolkit:MenuItem Header="{Binding Path=Name}" Click="MenuItem_Click"/>
           </DataTemplate>
        </toolkit:ContextMenu.ItemTemplate>
    </toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>