私は自分のカスタムチャートコントロールを実行しました。カーソルの後に単純な十字を描きたいと思います。チャートはCanvas上のPolyLineとして実装されており、CanvasのOnMouseMoveイベントで座標を変更する2行を描画しています。WPFでOnMouseMoveがキャンバスに表示されない
サプライズイベントのみ各10秒MainGUIスレッドがアイドル状態にあるので、イベントを呼び出されることが判明した(UIは完全に応答し、私はアプリケーションを一時停止した場合、メインスレッドは、App mainForm.ShowDialog())
である。
私はONMOUSEMOVEまたはPreviewOnMouseMoveを使用して同じパフォーマンスをこの出来事取得された理由を見つける方法上の任意のアイデア
編集:これは私がONMOUSEMOVEそれだけにブレークポイントを置く場合、私はとにかく(クロスを描く方法です時々停止する)
XAML:
<Border BorderThickness="1" BorderBrush="White" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" Grid.ColumnSpan="2" >
<Canvas x:Name="DrawArea" PreviewMouseMove="DrawArea_PreviewMouseMove" />
</Border>
CS:
public Chart()
{
_line = new Polyline();
_line.Stroke = Brushes.Orange;
_crossX = new Line();
_crossY = new Line();
_crossX.Stroke = Brushes.Orange;
_crossY.Stroke = Brushes.Orange;
_crossX.StrokeThickness = 1;
_crossY.StrokeThickness = 1;
InitializeComponent();
this.DrawArea.Children.Add(_line);
this.DrawArea.Children.Add(_crossX);
this.DrawArea.Children.Add(_crossY);
}
private void DrawArea_MouseMove(object sender, MouseEventArgs e)
{
Point mousePosition = System.Windows.Input.Mouse.GetPosition(this.DrawArea);
_crossX.X1 = 0;
_crossX.X2 = this.DrawArea.ActualWidth;
_crossX.Y1 = _crossX.Y2 = mousePosition.Y;
_crossY.Y1 = 0;
_crossY.Y2 = this.DrawArea.ActualHeight;
_crossY.X1 = _crossY.X2 = mousePosition.X;
}
カスタムのカーソルを定義することはできません。追加の図面を作成して "擬似"しようとしませんか? –
だから、パフォーマンス上の問題はありませんが、イベントは単に呼び出されていないという問題があります。私はこの権利を理解していますか? –
|ダニエル:十字架が描かれていると呼ばれますが、10秒ごとに1回更新される可能性があります。 –