シンプルなコードに問題があります。私は数時間の解決策を探していたが効果はなかった。 私はキャンバスと長方形を持っています。私はRectangleを移動します。カーソルが外側にある場合、pMouseMoveは各ピクセルに対して1回だけ発生します。逆に、カーソルがRectangleにある場合は、ピクセルごとに2回ディジェリーします。私は、それが矩形の外にあるかのように、一度だけ実行したい、それを行う方法?PreviewMouseMoveを2回実行する
XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Canvas x:Name="Can" Height="257" Width="503" Background="Gray">
<TextBox Name="tb" Width="77" Height="20" Canvas.Left="0" Canvas.Top="-21"/>
</Canvas>
</Window>
コードビハインド:
public partial class MainWindow : Window
{
Rectangle rect = new Rectangle();
private static int i;
private static string s;
public MainWindow()
{
InitializeComponent();
rect.Height = 50;
rect.Width = 50;
rect.Fill = Brushes.Black;
Can.Children.Add(rect);
Can.PreviewMouseMove += pMouseMove;
}
private void pMouseMove(object sender, MouseEventArgs e)
{
//cursor over Rectangle
Canvas.SetTop(rect, e.GetPosition(Can).Y + 10);
Canvas.SetLeft(rect, e.GetPosition(Can).X + 10);
//cursor outside Rectangle
//Canvas.SetTop(rect, e.GetPosition(Can).Y - 10);
//Canvas.SetLeft(rect, e.GetPosition(Can).X - 10);
//Counter
i++;
tb.Text = i.ToString();
//e.Handled = true;
}
}
WPFの私の悪い英語
マウスモーションイベントも時々はるかに少ない、画素毎に1よりも少ない頻繁に送信することができることをあなたは知っておく必要があります。パフォーマンスを気にするのは妥当ですが、正しさのために送信されたマウス移動イベントの数に依存するロジックはすべて破棄されます。 –