我正在學習WPF,並製作了一個簡單的程序,用鼠標繪製。我有一個帶有頂部和左側窗格的DockPanel,並且繪圖畫布佔據了剩餘的空間。當我單擊並拖動以繪製自由曲線時,線條的繪圖將被菜單佔用的空間量所抵消。我寧願不硬編碼值,因爲這些大小可能會改變。標準畫布畫布程序,由停靠的UI元素造成的偏移量。如何動態補償?
private void Canvas_MouseDown_1(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
// Console.WriteLine("Clicked");
if (e.ButtonState == MouseButtonState.Pressed)
{
offset = e.GetPosition(sender as FrameworkElement);
Console.WriteLine("Offset: " + offset.ToString());
currentPoint = e.GetPosition(this);
}
}
private void Canvas_MouseMove_1(object sender, System.Windows.Input.MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
Line line = new Line();
line.Stroke = SystemColors.WindowFrameBrush;
line.X1 = currentPoint.X;
line.Y1 = currentPoint.Y;
line.X2 = e.GetPosition(this).X;
line.Y2 = e.GetPosition(this).Y;
currentPoint = e.GetPosition(this);
canvas.Children.Add(line);
}
}
有沒有一種方法可以直接獲取畫布元素中的點而不是整個程序窗口?如果沒有,我可以得到菜單元素的繪製寬度和繪製高度,但這看起來並不是最優雅的解決方案。
謝謝!
是'e.GetPosition(發件人爲FrameworkElement的) '不正確地返回相對於'Canvas'的值?我看到你曾經使用過這種方法,但是使用'e.GetPosition(this)',否則它會返回它相對於整個'Window'(或任何'this')。 – Tim
啊,我很笨。那是,但是在我將currentPoint設置爲e.GetPosition(發件人爲FrameworkElement)之前,我忘了將它複製到MouseMove函數中。 >< – Benjin