【问题标题】:Using a ScrollViewer in a ContextMenu.MenuItem DataTemplate在 ContextMenu.MenuItem DataTemplate 中使用 ScrollViewer
【发布时间】:2011-05-05 10:11:48
【问题描述】:

我花了很多时间试图理解和实现一些看起来很容易的东西。

在我的 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>

我尝试在几乎所有地方添加一个 ScrollViewer(在标签之前:&lt;toolkit:ContextMenuService.ContextMenu&gt;,在标签之前 &lt;toolkit:ContextMenu ItemsSource="{Binding}"&gt;,...)但没有任何效果

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

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

它工作正常。

我错过了什么吗?

【问题讨论】:

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


    【解决方案1】:

    您需要将 ScrollViewer 放在模板中,将 StackPanel 放在 ItemsPanelTemplate 中,如下所示:

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

    【讨论】:

    • @Refre 很高兴我能帮上忙!如果这解决了您的问题,请将其标记为答案,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 2013-05-16
    • 2012-04-26
    • 2010-12-15
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多