2015-09-11 3 views
0

У меня есть следующая проблема. После ситуации в моем XAML коде:Событие контекстного меню или триггер элемента управления внутри элемента таблицы элементов списка не запускается

<ListView ItemsSource="{Binding ListViewItems}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <WrapPanel> 
        <Label Content="Test"> 
         <Label.ContextMenu> 
          <ContextMenu ItemsSource="{Binding MenuItems}"> 

          </ContextMenu> 
         </Label.ContextMenu> 
        </Label> 
       </WrapPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="PreviewMouseUp"> 
       <i:InvokeCommandAction Command="{Binding LabelMouseUpCommand}" /> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
    </ListView> 

После нажатия ярлыка нет контекстного меню не отображается, и триггер не работает, а метод LabelMouseUpCommand не введен. Я боюсь, что listview обрабатывает сам клик и не передает его встроенным элементам управления.

Есть ли способ передать его элементам управления. В будущем я хочу добавить несколько элементов управления в itemtemplate, и у каждого есть свое собственное контекстное меню.

+0

Если вы щелкните правой кнопкой мыши ярлык вы можете увидеть контекстное меню? –

+0

'Label.Background' имеет значение null, для этого вам нужно щелкнуть точно по тексту, чтобы появилось меню. Установите фон «Белый» (или «Прозрачный»). – Sinatr

+0

@Mattia Magosso: Нет, контекстное меню не отображается после щелчка правой кнопкой мыши. –

ответ

0

Я нашел ответ на мою проблему с этим stackoverflow article

Там автор объясняет, что Контекстное не лежит в том же визуальном дереве как ListView. Поэтому мое первоначальное связывание не может работать, потому что источник не может быть найден в визуальном дереве.

Кроме того, Sinatr был полностью прав, триггер был первоначально определен для списка, а не для метки.

Вот мой рабочий код:

<ListView ItemsSource="{Binding ListViewItems}" x:Name="listViewMain"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <WrapPanel> 
       <Label Content="Test"> 
        <Label.ContextMenu> 
         <ContextMenu ItemsSource="{Binding DataContext.MenuItems, Source={x:Reference listViewMain}}"> 

         </ContextMenu> 
        </Label.ContextMenu> 
        <i:Interaction.Triggers> 
         <i:EventTrigger EventName="PreviewMouseUp"> 
          <i:InvokeCommandAction Command="{Binding DataContext.LabelMouseUpCommand, Source={x:Reference listViewMain}}" /> 
         </i:EventTrigger> 
        </i:Interaction.Triggers> 
       </Label> 
      </WrapPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
Смежные вопросы