WPF应用程序 - <ellipse.inputbindings> - <mousebinding>

时间:2016-06-06 12:16:11

标签: c# wpf

您好我是WPF开发的新手,并遇到了一个问题,关于使用项目控件通过数据绑定创建的椭圆的鼠标绑定。这是源代码。我的问题是&#34; CLoadModelFromDisk&#34;绑定未执行。在另一个上下文中,Command没有任何问题。

<ItemsControl ItemsSource="{Binding JointsModelPartView}" Grid.Row="1" Grid.Column="1">            
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="FrameworkElement">
            <Setter Property="Canvas.Left" Value="{Binding posx1}" />
            <Setter Property="Canvas.Top" Value="{Binding posy1}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemTemplate>
        <DataTemplate DataType="Point">                       
            <Ellipse Fill="AntiqueWhite"
                     Stroke="Black"
                     Width="10"
                     Height="10"
                     Margin="-5,-5,5,5"   
                     >
            <Ellipse.InputBindings>
                <MouseBinding 
                    Command="{Binding CLoadModelFromDisk}"
                    Gesture="LeftClick"  
                    />
            </Ellipse.InputBindings>
        </Ellipse>                            
    </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas IsItemsHost="True" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

如果有人可以帮我解决这个问题,那真是太好了。

这是上下文菜单的代码,它不适用于您的解决方案。你知道为什么吗?

<Ellipse.ContextMenu>
                            <ContextMenu ItemsSource="{Binding DataContext.ContextActionsView, RelativeSource={RelativeSource AncestorType=ItemsControl}}">
                                <ContextMenu.ItemContainerStyle>
                                    <Style TargetType="MenuItem">
                                        <Setter Property="Header" Value="{Binding Name}"/>
                                        <Setter Property="Command" Value="{Binding RCommand}"/>
                                    </Style>
                                </ContextMenu.ItemContainerStyle>
                            </ContextMenu>
                        </Ellipse.ContextMenu>

我已经尝试将相对源设置为标题和命令,但这也不起作用。

1 个答案:

答案 0 :(得分:0)

在DataTemplate中,DataContext将是模板中显示的项目 - JointsModelPartView中的项目之一。这些项目是否具有名为CLoadModelFromDisk的ICommand类型的属性?

我的猜测是他们没有,而且CLoadModelFromDisk是与JointsModelPartView相同的视图模型的成员。在这种情况下,您需要不绑定到列表项,而是绑定到属性实际所属的父视图模型。这将是ItemsControl的DataContext - 它必须是,因为ItemsControl能够绑定到JointsModelPartView。

试试这个:

<MouseBinding 
    Command="{Binding DataContext.CLoadModelFromDisk, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
    Gesture="LeftClick"  
    />