在画布内拖动图像属性

时间:2015-12-07 08:42:15

标签: c# wpf canvas drag-and-drop opacity

我的画布中有一个拖放功能,我有很多图像。我想改变我刚刚点击的图像的不透明度,显然它有效。但是,当我单击2个或更多图像并更改不透明度时,所有单击的图像也会更改。我只想要点击的最后一张图片被更改。

这是我的代码:

private void CanvasLayout_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var image = e.Source as Image;

    if (image != null && CanvasLayout.CaptureMouse())
    {
        mousePosition = e.GetPosition(CanvasLayout);
        draggedImage = image;
        Panel.SetZIndex(draggedImage, 1);

        for (int i = 1; i < 9; i++)
        {
            if (draggedImage.Name == "Image" + i)
            {
                SelectComp_ComboBox.SelectedValue = "0" + (i + 1);

                Binding binding = new Binding
                {
                    Source = TransHidden_textBox,
                    Path = new PropertyPath("Text"),
                };
                draggedImage.SetBinding(ContentControl.OpacityProperty, binding);
            }
        }
    }
}
private void CanvasLayout_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    if (draggedImage != null)
    {
        CanvasLayout.ReleaseMouseCapture();
        Panel.SetZIndex(draggedImage, 0);
        draggedImage = null;
    }
}

我认为问题在于draggedImage.SetBinding(ContentControl.OpacityProperty, binding);,我需要将draggedImage更改为Image + i,但我不知道如何将string更改为{{ 1}}。

我该怎么做?有没有其他简单的方法来解决我的问题?

1 个答案:

答案 0 :(得分:0)

从您提供的代码中不清楚,但我猜您没有清除不再拖动的项目的不透明度绑定。你应该打电话给

BindingOperations.ClearBinding(noLongerDraggedImage, ContentControl.OpacityProperty);

为了做到这一点,其中noLongerDraggedImage(显然)是对不再拖动的图像的引用。根据您的代码,您可以在处理拖动结束的方法中执行此操作(即删除或取消),或者,您可以在{{{}的开头迭代除draggedImage之外的所有图像。 1}}方法。请注意,在后一种情况下,最后拖动的图像将具有不同的不透明度,直到拖动另一个图像,这不是标准行为。

修改

由于您已经为CanvasLayout_MouseLeftButtonDown方法提供了代码,因此我知道将上述行放入其中:

CanvasLayout_MouseLeftButtonUp

应该能得到预期的结果。

编辑II

我不确定我是否理解你在这里想要完成什么,所以也许我最好退一步回答你的问题 - 如何获得具有特定名称的图像。一种可能性是在private void CanvasLayout_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (draggedImage != null) { CanvasLayout.ReleaseMouseCapture(); Panel.SetZIndex(draggedImage, 0); BindingOperations.ClearBinding(draggedImage, ContentControl.OpacityProperty); draggedImage = null; } } 集合中找到它:

Canvas.Children

请注意,只有当您确定集合中只有一个具有给定名称的图像时,才使用Single方法,否则将引发异常。如果不是这种情况,您应该考虑使用SingleOrDefault - 如果有一个或没有匹配名称的图像,或FirstOrDefault - 对于任意数量的匹配名称的图像。