【发布时间】:2017-11-22 15:32:31
【问题描述】:
我将 MVVM 用于我的 wpf 项目,并希望将事件(Drop、DragOver、DragEnter)移动到我的视图模型中。我在网格中使用了事件,但是无论我如何设置 TargetObject 或其他属性,该方法都不会执行。但是我做了另一个项目来重现这种情况。 代码如下:
XAML
<Window x:Class="WpfApplication2.MainWindow"
.
.
.
Title="MainWindow" Height="350" Width="525">
<Grid x:Name="grid" AllowDrop="True" >
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="110,57,0,0"/>
<i:Interaction.Triggers>
<!--<i:EventTrigger EventName="Drop">
<ie:CallMethodAction MethodName="OnGrid_Drop" TargetObject="{Binding}" />
</i:EventTrigger>
<i:EventTrigger EventName="DragOver">
<ie:CallMethodAction MethodName="OnGrid_DragOver" TargetObject="{Binding }" />
</i:EventTrigger>-->
<i:EventTrigger EventName="DragEnter">
<ie:CallMethodAction MethodName="OnGrid_DragEnter" TargetObject="{Binding ElementName=grid}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Grid>
</Window>
代码隐藏
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
AllocConsole();
}
private void OnGrid_Drop(object sender, DragEventArgs e)
{
Console.WriteLine("00000");
}
private void OnGrid_DragEnter(object sender, DragEventArgs e)
{
Console.WriteLine("11111");
}
private void OnGrid_DragOver(object sender, DragEventArgs e)
{
Console.WriteLine("22222");
}
...... //The code in here is to make the console pop up.
}
我有两个问题:
(1) 我在网格上拖了一些东西,该方法没有被执行。当嘴巴移动到按钮上时,鼠标光标确实发生了变化,但该方法也没有被执行。这是为什么呢?
(2) 如果将网格属性更改为<Grid x:Name="grid" AllowDrop="True" DragEnter="OnGrid_DragEnter">(并删除Interaction.Triggers),只有当我在按钮上拖动某些东西时,才会触发该事件。我相当确定我的鼠标在网格中,但只有当鼠标悬停在按钮上时才会触发。这是为什么呢?
代码很容易复现,希望有人帮我解决这个问题。
【问题讨论】: