命令参数"位置"对于MouseDown事件

时间:2015-09-17 07:15:05

标签: c# wpf user-controls

我有ResourceDictionary Canvas,我需要获得mouseDown事件的位置(以及此WPFpixel的颜色)。

所以,我有一个像这样的XAML代码:

<Canvas  Grid.Column="1" Grid.Row="0" Width="200" Height="200" SnapsToDevicePixels="True" Background="{StaticResource CustomBrush}">
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="MouseLeftButtonDown">
                                        <local:EventToCommand RouteEventArgs="True" Command="local:ColorPicker.SomeAction" CommandParameter="{Binding Path=Position}"/>
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>

因此,在我的.cs文件中,我可以从命令参数e.Parameter获取位置。 我试图找到任何信息,但除MouseEventArgs之外,所有示例均为ExecutedRoutedEventArgs。所以,问题是:我需要使用哪个CommandParameter?或者你可以建议任何其他解决办法。

我的第二个问题是如何获得颜色。我有一个渐变的自定义填充,我无法分析确切的颜色具有精确的像素。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案。 我添加了一个处理程序 AddHandler(PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(Get_position), true); 然后我得到函数Get_position

中的坐标
    private static void Get_position(object sender, MouseButtonEventArgs e)
    {
        DependencyObject parent = e.OriginalSource as UIElement;
        while (parent != null && !(parent is Canvas))
            parent = VisualTreeHelper.GetParent(parent);

        if (parent != null)
        {
            var point = e.GetPosition(parent as UIElement);
            int x = (int)point.X;
            int y = (int)point.Y;
        }
    }

然后我可以将它们发送给我。也许,它不是最好的解决方案,但它有效......

关于计算像素的颜色,我没有找到任何解决方案。但是,我通过计算R,G,B值来解决它。我有一个带渐变画笔的画布。所以,如果我知道宽度/高度,我可以计算它们。 另一方面,它对我来说仍然是一个有趣的问题。