私のwpfプロジェクトにMVVMを使用しましたが、イベント(Drop、DragOver、DragEnter)をビューモデルに移動します。グリッドでイベントを使用しましたが、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.
}
私が持っている2質問:
(1)私は、グリッド上で何かをドラッグして、メソッドは実行されませんでした。口がボタンの上を移動すると、マウスカーソルは変化しましたが、メソッドは実行されませんでした。何故ですか?
(2)グリッドプロパティを<Grid x:Name="grid" AllowDrop="True" DragEnter="OnGrid_DragEnter">
に変更して(Interaction.Triggersを削除する)、ボタン上で何かをドラッグした場合にのみ、イベントがトリガーされます。私はマウスがグリッド内にあることを確かめていますが、ボタンの上にマウスを置いたときは三角だけです。何故ですか?
コードは非常に再現しやすいです、誰も私がこの問題を解決するのを助けてくれることを願っています。
私はあなたの答えで私の問題を解決しました。とても役に立ちます。どうもありがとうございます。 – user7990701