拖放在TextBlock控件上有效,但在Image Control上无效

时间:2019-04-21 18:56:21

标签: wpf image drag-and-drop

Google终于使我失败了。我看过我能想到的任何地方,但无济于事。在我的项目中,我有一个图像控件,我想将图片拖放到其中,并将其文件路径保存在变量中,并将图像显示在控件中。

经过多次尝试,我决定打开一个新项目并简化所有操作。现在,它似乎可以归结为Drop事件,但它确实在TextBlock控件上触发时却不在Image控件上触发。

Xaml:

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:VB"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<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"/>
    <Image AllowDrop="True" Drop="Image_Drop"/>
</Grid>

后面的代码:

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

无关紧要的文件类型。每个放在TextBlock上的文件都会导致MessageBox打开。放在图像控件上的每个文件绝对没有任何作用。

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

编辑:感谢BulutaySaraç在下面的评论中的建议,我发现将一个库存Image文件添加到该项目并将其作为Image控件的源进行引用已解决了该问题,并且该事件现在可以正确触发。对于那些不想添加默认图像文件的人,请参阅下面的BulutaySaraç答案,以获取简单有效的解决方法。

1 个答案:

答案 0 :(得分:0)

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

<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>

VB

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