使用ControlTemplate在ContextMenu中进行Caliburn Micro Action

时间:2014-10-10 12:00:29

标签: c# wpf mvvm binding caliburn.micro

我在ControlTemplate中有一个带有ContextMenu的自定义组件。我已经阅读了一些帖子,其中有些人无法让他们的行为在ContextMenu中工作。我已经尝试过那里发布的变通方法,但我无法让它工作。我不断得到No target found for method Open.然而,这些解决方案都没有使用ControlTemplate。我试图将模型绑定到contextmenu,到menuitems,以使用TargetWithoutContext属性,但似乎都没有。

 <components2:ImageBlock Background="Transparent" x:Name="ShareButton" Margin="0,0,7,0" >
     <components2:ImageBlock.Style>
          <Style TargetType="{x:Type components2:ImageBlock }">
               <Setter Property="ToolTipService.IsEnabled" Value="False"/>
               <Setter Property="Cursor" Value="Hand"/>
               <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
               <Setter Property="Template">
                    <Setter.Value>
                         <ControlTemplate TargetType="{x:Type components2:ImageBlock }">
                                <Grid x:Name="ContentGrid" Background="{TemplateBinding Background}" MinHeight="30" ToolTip="{TemplateBinding ToolTip}">
                                      <Grid.ContextMenu>
                                            <ContextMenu>
                                                 <MenuItem Header="Facebook" cal:Message.Attach="Open(0)"/>
                                                 <MenuItem Header="Twitter"  cal:Message.Attach="Open(1)]" />
                                                 <MenuItem Header="Tumblr" cal:Message.Attach="Open(2)]" />
                                             </ContextMenu>
                                       </Grid.ContextMenu>
                                </Grid>
                         </ControlTemplate>
                     </Setter.Value>
                </Setter>
           </Style>
      </components2:ImageBlock.Style>
  </components2:ImageBlock>

如何让Open在视图后面的viewmodel上工作?

1 个答案:

答案 0 :(得分:0)

让它通过添加到DependencyObject的{​​{1}},我必须将ImageBlock的{​​{1}}设置为PlacementTarget 。奇怪的是,直接将ContextMenuImageBlock的{​​{1}}设置为PlacementTarget不起作用。