2014-11-04 7 views
3

В моем приложении WPF я добавляю обработчик события click для контекстного меню (контекстное меню для ListBoxItem).WPF Сгенерированные файлы не будут компилироваться

Когда я пытаюсь следующий подход:

  <ListBox.ItemContainerStyle> 
       <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
        <Setter Property="ContextMenu"> 
         <Setter.Value> 
          <ContextMenu> 
           <MenuItem Header="Remove" Click="RemoveSelectedSchedule"/> 
          </ContextMenu> 
         </Setter.Value> 
        </Setter> 
        <EventSetter Event="MouseDoubleClick" Handler="ScheduleList_MouseDoubleClick"/> 
       </Style> 
      </ListBox.ItemContainerStyle> 

и попытаться построить, построить не удается со следующими сообщениями об ошибках:

1> C: \ Users \ Pawel \ Source \ Repos \ academiccalendar \ AcademicCalendar.Desktop \ obj \ Debug \ MainWindow.g.cs (113,14,113,15): ошибка CS1513:} ожидается 1> C: \ Users \ Pawel \ Source \ Repos \ academcalendar \ AcademicCalendar.Desktop \ obj \ Debug \ MainWindow.g.cs (123,19,123,20): ошибка CS1514: {expected 1> C: \ Users \ Pawel \ Source \ Repos \ academcalendar \ Aca demicCalendar.Desktop \ obj \ Debug \ MainWindow.g.cs (125,9,125,10): ошибка CS1525: недопустимый термин выражения '}' 1> C: \ Users \ Pawel \ Source \ Repos \ academcalendar \ AcademicCalendar.Desktop \ obj \ Debug \ MainWindow.g.cs (125,10,125,11): ошибка CS1002:; Ожидаемый

Однако, если настройка обработчика события Click удалена для контекстного меню, код компилируется и запускается правильно.

Обработчик событий EDIt в настоящее время оставлен пустым.

void RemoveSelectedSchedule(object sender, RoutedEventArgs e) 
    { 

    } 
+0

Щелкните правой кнопкой мыши по t он щелкнет обработчик событий в окне XAML и переместится к eventhanlder. Посмотрите на код, который действительно близко. –

ответ

2

Это странно ...

После некоторых игр я получил его скомпилировать

  1. удалить код

     <Setter Property="ContextMenu"> 
          <Setter.Value> 
           <ContextMenu> 
            <MenuItem Header="Remove" Click="RemoveSelectedSchedule"/> 
           </ContextMenu> 
          </Setter.Value> 
         </Setter> 
    
  2. Compile - Сбой

  3. Добавить второй EventSetter

  4. Compile Fails

  5. Добавить обратно код

     <Setter Property="ContextMenu"> 
          <Setter.Value> 
           <ContextMenu> 
            <MenuItem Header="Remove" Click="RemoveSelectedSchedule"/> 
           </ContextMenu> 
          </Setter.Value> 
         </Setter> 
    
  6. Compile снова - компилировать !!!

Что-то не так с компилятором WPF ...

Edit 1 Лучше ответа ...

При перемещении ContextMenu в разделе

<ContextMenu x:Key="ListBoxItemContextMenu"> 
      <MenuItem Header="View" Name="MenuItemView" Click="ContextClicked"/> 
     </ContextMenu> 

ресурсов, и доступ к нему в Сеттер работает

<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
          <Setter Property="ContextMenu" Value="{StaticResource ListBoxItemContextMenu}"> 
          </Setter> 
          <EventSetter Event="MouseDown" Handler="EventSetter_OnHandler1"></EventSetter> 
          <EventSetter Event="MouseDoubleClick" Handler="EventSetter_OnHandler2"></EventSetter> 
         </Style> 
+0

Спасибо, ваше решение помогает. Тем не менее, это странное поведение, я буду исследовать его в ближайшем будущем. – pkupidura

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