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ç答案,以获取简单有效的解决方法。
答案 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