我在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上工作?
答案 0 :(得分:0)
让它通过添加到DependencyObject
的{{1}},我必须将ImageBlock
的{{1}}设置为PlacementTarget
。奇怪的是,直接将ContextMenu
到ImageBlock
的{{1}}设置为PlacementTarget
不起作用。