c# - WPF Caliburn.Micro ItemsControl ContextMenu 找不到方法

标签 c# wpf contextmenu caliburn.micro

我在使用 Caliburn.Micro 的 ContextMenu 时确实遇到了一些问题。无论我做什么,我都会收到错误“无法找到该方法...”。

我已经尝试过this solutions ,和that one我也是,但我无法让它发挥作用。

我做错了什么?实际上,有一种方法可以调试 View 并找出控件在哪个上下文中搜索相应的 ViewModel?

还有一件事...这个 View 位于另一个 View 的 DataTemplate 内部,这会改变什么吗?所有其他绑定(bind)都在正确的 ViewModel 中工作...

<ScrollViewer VerticalScrollBarVisibility="Auto"  
                  HorizontalScrollBarVisibility="Disabled" 
                  Grid.Row="1" Grid.Column="0" 
                  Padding="10,5,15,5"
                  MaxHeight="390" x:Name="xImages">
        <ItemsControl 
            ItemsSource="{Binding Path=Document.Images}"                
            dd:DragDrop.IsDragSource="True"
            dd:DragDrop.IsDropTarget="True">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Height="110">
                        <Border Margin="5" BorderBrush="Gainsboro" BorderThickness="1">
                            <Image Source="{Binding Path=PathThumb}" Width="70" Height="100"> <!-- Tag="{Binding DataContext, ElementName=xImagens}" -->
                                <Image.ContextMenu>
                                    <ContextMenu 
                                        cal:Action.TargetWithoutContext="{Binding DataContext, ElementName=xImagens}"> <!--PlacementTarget.Tag, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"-->
                                        <MenuItem Header="Ampliar"
                                                cal:Message.Attach="[Event Click] = [Action ExpandImage($datacontext)]"></MenuItem>
                                        <MenuItem Header="Excluir" 
                                                cal:Message.Attach="[Event Click] = [Action DeleteImage($datacontext)]"></MenuItem>
                                    </ContextMenu>
                                </Image.ContextMenu>
                            </Image>
                        </Border>
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Horizontal" ScrollViewer.HorizontalScrollBarVisibility="Disabled" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </ScrollViewer>

最佳答案

 cal:Action.TargetWithoutContext="{Binding Source={x:Reference xImagens} , Path=DataContext}">

因为 ContextMenu 不是 VisualTree 的一部分,所以您无法绑定(bind)到可视树中的元素 它的TargetPlacement。 (尽管在 XAML 中它似乎是其中的一部分)。

你有两个选择:

   {Binding Path=PlacementTarget.DataContext}

或者:

   {Binding Source={x:Reference xImagens}, Path=DataContext}

关于c# - WPF Caliburn.Micro ItemsControl ContextMenu 找不到方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25611727/

相关文章:

c# - 在 WPF 中的两个用户控件之间发送命令

c# - 将 POCO 模型转换为 MongoDB 的 Bson 格式

c# - WebApi 从 HttpActionContext 序列化对象

c# - WPF 中类似甘特图的 View /用户控件,如何创建

contextmenu - WeifenLuo.WinFormsUI.Docking 的选项卡上下文菜单

.net - 如何隐藏功能区控件的上下文菜单

winapi - 如何在Windows编辑控件上下文菜单中禁用复制/粘贴命令?

c# - 可以在泛型方法中使用 IList 但不能使用 List

c# - 如何将三 View 节点复选框设置为混合状态,即如果选择了任何子节点,则应填写父节点以指示

c# - 旋转渐变在 WPF 中脱离 Canvas