我的画布中有一个拖放功能,我有很多图像。我想改变我刚刚点击的图像的不透明度,显然它有效。但是,当我单击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}}。
我该怎么做?有没有其他简单的方法来解决我的问题?
答案 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
- 对于任意数量的匹配名称的图像。