带有ControlTemplate的ContextMenu中的Caliburn Micro Action
本文关键字:Caliburn Micro Action 中的 ContextMenu ControlTemplate 带有 | 更新日期: 2023-09-27 18:26:07
我在ControlTemplate中有一个带有ContextMenu的自定义组件。我读过几篇关于人们在ContextMenu中难以执行操作的帖子。我已经尝试了张贴在那里的变通方法,但我无法让它发挥作用。我一直得到No target found for method Open.
,但是这些解决方案都没有使用ControlTemplate。我曾尝试将模型绑定到上下文菜单、菜单项,以使用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在视图后面的视图模型中工作?
通过添加到ImageBlock
的DependencyObject
使其工作,其中我必须将ContextMenu
的PlacementTarget
设置为ImageBlock
。奇怪的是,直接将ContextMenu
到{Binding ...}
的PlacementTarget
设置为ImageBlock
不起作用。