Ошибка «Не найден целевой метод» при использовании cal: Message.Attach в контекстном меню WPF - PullRequest
1 голос
/ 11 ноября 2019

Я использую Caliburn.Micro. Я пробовал решения, которые я нашел для этой проблемы, но это не хорошо. У меня есть следующий код XAML для моего дизайна:


<Grid x:Name="ActionGrid">
    <MenuItem Header="Action" FontFamily="Open Sans" FontSize="14" HorizontalContentAlignment="Right" Foreground="White" x:Name="miAction" Margin="5" Background="#FF166FC4" Tag="{Binding DataContext}">
         <MenuItem.Style>
               <Style TargetType="{x:Type MenuItem}">
                      <Style.Triggers>
                          <EventTrigger RoutedEvent="Click">
                                 <EventTrigger.Actions>
                                        <BeginStoryboard>
                                              <Storyboard>
                                                   <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen">
                                                          <DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
                                                   </BooleanAnimationUsingKeyFrames>
                                              </Storyboard>
                                        </BeginStoryboard>
                                 </EventTrigger.Actions>
                          </EventTrigger>
                      </Style.Triggers>
                      <Setter Property="Tag" Value="{Binding Path=DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MenuItem}}"/>
                      <Setter Property="ContextMenu">
                            <Setter.Value>
                                    <ContextMenu cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}">
                                           <MenuItem Header="Remove Group" cal:Message.Attach="RemoveClicked()" />
                                    </ContextMenu>
                            </Setter.Value>
                      </Setter>
             </Style>
        </MenuItem.Style>
   </MenuItem>
</Grid>

<UserControl.DataContext>
        <vm:TransactionViewModel/>
</UserControl.DataContext>

Каждый раз, когда я нажимаю на элемент, он возвращает No Method Found for RemoveClicked. Я не знаю, что я сделал не так. Пожалуйста, помогите мне указать это.

Ответы [ 2 ]

1 голос
/ 11 ноября 2019

Tag="{Binding DataContext}" должно быть Tag="{Binding}", а cal:Action.TargetWithoutContext присоединенное свойство должно быть установлено на MenuItem. Тогда это работает, если вы вправо нажмите на MenuItem, чтобы открыть ContextMenu:

<MenuItem Header="Action" FontFamily="Open Sans" FontSize="14" HorizontalContentAlignment="Right" Foreground="White" x:Name="miAction" 
                  Margin="5" Background="#FF166FC4" Tag="{Binding}">
    <MenuItem.Style>
        <Style TargetType="{x:Type MenuItem}">
            <Style.Triggers>
                <EventTrigger RoutedEvent="Click">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen">
                                    <DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
                                </BooleanAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Style.Triggers>
            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu>
                        <MenuItem Header="Remove Group"
                                          cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"
                                          cal:Message.Attach="RemoveClicked()" />
                    </ContextMenu>
                </Setter.Value>
            </Setter>
        </Style>
    </MenuItem.Style>
</MenuItem>

. Используйте EventTrigger, чтобы открыть ContextMenu в влево click не работает с привязками, и это не имеет ничего общего с Caliburn.Micro:

Контекстное меню WPF при щелчке левой кнопкой мыши

Вы можете заменить EventTrigger с прикрепленным поведением .

0 голосов
/ 11 ноября 2019

Я не уверен, но вы можете проверить это:

<MenuItem Header="Remove Group" cal:Message.Attach="RemoveClicked" />
...