Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 画布内的拖动图像属性_C#_Wpf_Canvas_Drag And Drop_Opacity - Fatal编程技术网

C# 画布内的拖动图像属性

C# 画布内的拖动图像属性,c#,wpf,canvas,drag-and-drop,opacity,C#,Wpf,Canvas,Drag And Drop,Opacity,我有一个拖放功能在我的画布上,我有很多图像。我想改变我刚才点击的图像的不透明度,很明显它起作用了。但是,当我单击两个或多个图像并更改不透明度时,所有单击的图像也会更改。我只想要我点击的最后一张图片被改变 这是我的密码: private void CanvasLayout_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { var image = e.Source as Image; if (image !=

我有一个拖放功能在我的画布上,我有很多图像。我想改变我刚才点击的图像的不透明度,很明显它起作用了。但是,当我单击两个或多个图像并更改不透明度时,所有单击的图像也会更改。我只想要我点击的最后一张图片被改变

这是我的密码:

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;
    }
}
private void canvas布局\u MouseLeftButtonDown(对象发送器,MouseButtonEventArgs e)
{
var image=e.源作为图像;
if(image!=null&&CanvasLayout.CaptureMouse())
{
mousePosition=e.GetPosition(画布布局);
draggedImage=图像;
面板设置索引(draggedImage,1);
对于(int i=1;i<9;i++)
{
if(draggedImage.Name==“Image”+i)
{
选择comp_组合框。SelectedValue=“0”+(i+1);
绑定=新绑定
{
Source=TransHidden_文本框,
路径=新属性路径(“文本”),
};
draggedImage.SetBinding(ContentControl.OpacityProperty,绑定);
}
}
}
}
私有void画布布局_MouseLeftButtonUp(对象发送器,MouseButtonEventArgs e)
{
如果(draggedImage!=null)
{
CanvasLayout.ReleaseMouseCapture();
面板设置指数(draggedImage,0);
draggedImage=null;
}
}
我认为问题出在这行
draggedImage.SetBinding(ContentControl.OpacityProperty,binding)
我需要将
draggedImage
更改为
Image+i
,但我不知道如何将
字符串
更改为
Image


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

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

BindingOperations.ClearBinding(noLongerDraggedImage, ContentControl.OpacityProperty);
为此,其中
noLongerDraggedImage
显然是对不再拖动的图像的引用。根据您的代码,您可以通过处理拖动结束(即拖放或取消)的方法执行此操作,或者,您也可以在
CanvasLayout\u MouseLeftButtonDown
方法开始时迭代除
draggedImage
之外的所有图像。请注意,在后一种情况下,在拖动另一个图像之前,最后一个拖动的图像将具有不同的不透明度,这不是标准行为

编辑

由于您提供了
CanvasLayout\u 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
collection中找到它:

var name = "Image" + i.ToString();
var imageX = CanvasLayout.Children.OfType<Image>().Single(i => i.Name == name);
var name=“Image”+i.ToString();
var imageX=CanvasLayout.Children.OfType().Single(i=>i.Name==Name);

请注意,只有在确定集合中只有一个具有给定名称的图像时,使用方法才是安全的,否则将引发异常。如果不是这样的话,你应该考虑使用-如果有一个或没有一个匹配名称的图像,或者——对于任意数量的具有匹配名称的图像。< /P>我用<代码> CavasLayExtMouSelftButoNoD/<代码>来编辑我的代码。我试图在
CanvasLayout\u MouseLeftButtonDown
中使用
ClearBinding
,但由于图像为空,因此出现了错误。我仍然不明白该怎么做,很抱歉我的回复太晚了,我做到了,但是有了代码,透明度只有在我按住鼠标的时候才会改变。我认为最好的解决方案是通过字符串
Image+I
获取
draggedImage
名称,但我不知道如何实现。哦,我还以为这就是目标。。。好的,在我更新我的答案之前,请确认我的回答是否正确-你想在单击图像时对其应用自定义不透明度,并在单击另一个图像时将先前单击的图像恢复为正常?是的,是的,我的意思是,使用你的代码,当我单击另一个图像时,第一个图像将丢失新的不透明度值,因为绑定被清除,所以它不会被保存。