Wpf 拖放操作适用于TextBlock控件,但不适用于图像控件

Wpf 拖放操作适用于TextBlock控件,但不适用于图像控件,wpf,image,drag-and-drop,Wpf,Image,Drag And Drop,谷歌终于让我失望了。我找遍了我能想到的每一个地方,但都无济于事。在我的项目中,我有一个图像控件,我想将图片放到其中,并将其文件路径保存在变量中,图像显示在控件中 经过几次尝试,我决定打开一个新项目,简化一切。现在,它似乎归结为Drop事件没有在图像控件上触发,而在TextBlock控件上触发 Xaml: 文件类型无关紧要。文本块上的每个文件都会导致MessageBox打开。图像控件上的每个文件都完全不起作用 我不知道为什么,任何建议将不胜感激 编辑:多亏了Bulutay Saraç在下面的评论中

谷歌终于让我失望了。我找遍了我能想到的每一个地方,但都无济于事。在我的项目中,我有一个图像控件,我想将图片放到其中,并将其文件路径保存在变量中,图像显示在控件中

经过几次尝试,我决定打开一个新项目,简化一切。现在,它似乎归结为Drop事件没有在图像控件上触发,而在TextBlock控件上触发

Xaml:

文件类型无关紧要。文本块上的每个文件都会导致MessageBox打开。图像控件上的每个文件都完全不起作用

我不知道为什么,任何建议将不胜感激


编辑:多亏了Bulutay Saraç在下面的评论中提出的建议,我发现在项目中添加一个股票图像文件并引用它作为图像控件的源解决了问题,事件现在可以正常启动。对于那些不希望添加默认图像文件的人,请参阅下面的Bulutay Saraç的答案,以获得简单有效的解决方法。

这是解决此问题的一种方法。将图像控件放入容器(我使用了网格)中,为容器提供透明背景,并在容器上调用事件

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Grid.Column="1" AllowDrop="True" Drop="TextBlock_Drop"/>
    <Grid AllowDrop="True" Drop="Image_Drop" Background="Transparent">
        <Image />
    </Grid>
</Grid>

您的图像是空的吗?因为如果图像没有其mouseDown的源,则拖放事件不起作用。它的行为类似于透明对象。因此,我应该在主窗口中设置一个空的BitmapImage变量作为属性,然后将其设为图像控件的源?如果不设置图像源,事件将不起作用。您需要使用类似网格的容器,并将图像控件放入其中,然后将网格的背景属性设置为透明,最后从网格调用事件。这是最清晰的方法。类似的问题:我在下面添加了一个包含代码的详细答案。谢谢!这帮了大忙
Class MainWindow

    Private Sub TextBlock_Drop(sender As Object, e As DragEventArgs)

        MessageBox.Show("fired")

    End Sub

    Private Sub Image_Drop(sender As Object, e As DragEventArgs)

        MessageBox.Show("fired")

    End Sub

End Class
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Grid.Column="1" AllowDrop="True" Drop="TextBlock_Drop"/>
    <Grid AllowDrop="True" Drop="Image_Drop" Background="Transparent">
        <Image />
    </Grid>
</Grid>
Class MainWindow
    Private Sub Image_Drop(sender As Object, e As DragEventArgs)
        MessageBox.Show("Image")
    End Sub

    Private Sub TextBlock_Drop(sender As Object, e As DragEventArgs)
        MessageBox.Show("Text Block")
    End Sub
End Class