내 wpf 프로젝트에 MVVM을 사용하고 이벤트 (Drop, DragOver, DragEnter)를 내 viewmodel로 이동하려고합니다. 표에서 이벤트를 사용했지만 TargetObject 또는 기타 속성을 설정하는 방법에 관계없이 메서드가 실행되지 않습니다. 그러나 상황을 재현 할 또 다른 프로젝트를 만들었습니다. 여기 코드입니다 :Drop, DragOver, DragEnter 이벤트에서 WPF CallMethodAction이 작동하지 않습니다.
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를 삭제하는 경우) 버튼에 무엇인가 드래그 할 때만 이벤트가 트리거됩니다. 내 마우스가 그리드에 있음을 확신하지만 버튼 위에 마우스를 올려 놓을 때만 trig. 왜 그런가요?
코드는 매우 쉽게 재현 할 수 있으며이 문제를 해결하는 데 도움이 될 수 있기를 바랍니다.
답변으로 내 문제를 해결했습니다. 매우 도움이됩니다. 정말 고맙습니다. – user7990701