Использование ScrollViewer в DataTemplate ContextMenu.MenuItem - PullRequest
2 голосов
/ 05 мая 2011

Я потратил много времени, пытаясь понять и реализовать что-то, что выглядит легко.

В моем приложении 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 почти везде (перед тегом: <toolkit:ContextMenuService.ContextMenu>, перед тегом <toolkit:ContextMenu ItemsSource="{Binding}">, ...), но ничего не работает

Я также пытался использовать в своем теге присоединенное свойство:

<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 Ответ

4 голосов
/ 05 мая 2011

Вы захотите поместить свой 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>
...