2

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

В моем приложении 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> 

он работает отлично.

Я что-то пропустил?

ответ

4

Вы хотите разместить 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> 
+0

Спасибо, это работает отлично .. – Refre

+0

@Refre Рад, что смог помочь! Если это решит вашу проблему, отметьте ее как ответ, спасибо. – theChrisKent

Смежные вопросы