画布内的Dragged Images属性
本文关键字:Images 属性 Dragged 布内 | 更新日期: 2023-09-27 18:25:52
我的画布上有一个拖放功能,里面有很多图像。我想改变我刚刚点击的图像的不透明度,显然它起了作用。但是,当我单击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
更改为Image
。
我该怎么做?有其他简单的方法来解决我的问题吗?
从您提供的代码中还不清楚,但我猜您没有为不再拖动的项清除不透明度绑定。你应该打电话给
BindingOperations.ClearBinding(noLongerDraggedImage, ContentControl.OpacityProperty);
其中noLongerDraggedImage
(显然)是对不再拖动的图像的引用。根据您的代码,您可以在处理拖动结束(无论是拖放还是取消)的方法中执行此操作,也可以在CanvasLayout_MouseLeftButtonDown
方法开始时迭代除draggedImage
之外的所有图像。请注意,在后一种情况下,最后拖动的图像在拖动另一个图像之前将具有不同的不透明度,这不是标准行为。
编辑
由于您已经提供了CanvasLayout_MouseLeftButtonUp
方法的代码,据我所知,在其中放入前面提到的行:
private void CanvasLayout_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (draggedImage != null)
{
CanvasLayout.ReleaseMouseCapture();
Panel.SetZIndex(draggedImage, 0);
BindingOperations.ClearBinding(draggedImage, ContentControl.OpacityProperty);
draggedImage = null;
}
}
应该会给你带来预期的结果。
编辑II
我不确定我是否理解你在这里到底想实现什么,所以也许我最好退一步回答你的问题——如何获得一个特定名称的图像。一种可能性是在Canvas.Children
集合中找到它:
var name = "Image" + i.ToString();
var imageX = CanvasLayout.Children.OfType<Image>().Single(i => i.Name == name);
请注意,只有当您确定集合中只有一个具有给定名称的图像时,使用Single
方法才是安全的,否则将引发异常。如果不是这样,您应该考虑使用SingleOrDefault
(如果有一个或没有图像具有匹配的名称),或者FirstOrDefault
(对于任何数量的具有匹配名称的图像)。