1
我遍歷給定Canvas對象的所有子節點。麻煩的是,它隻影響到兩個孩子中的一個。我在另一個類似事件中進行的另一個迭代工作得很好。我這有讓您可以拖動的元素:Canvas.Children的迭代問題
private Point lastmousepoint;
private void Window_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == System.Windows.Input.MouseButtonState.Pressed)
{
Point mousepos = e.GetPosition(this);
foreach (UIElement element in canvas1.Children)
{
Canvas.SetLeft(element, Canvas.GetLeft(element) + (mousepos.X - lastmousepoint.X));
Canvas.SetTop(element, Canvas.GetTop(element) + (mousepos.Y - lastmousepoint.Y));
lastmousepoint = mousepos;
}
}
e.Handled = true;
}
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
lastmousepoint = e.GetPosition(this);
e.Handled = true;
}
private void Window_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
}
但只有兩個文本的一個是移動的,而他們都很舉動。實際的運動很好,按預期工作。
此代碼
private int CurrentScaleLevel = 0;
private void Window_MouseWheel(object sender, MouseWheelEventArgs e)
{
foreach (UIElement element in canvas1.Children)
{
Point p = e.MouseDevice.GetPosition(element);
Matrix m = element.RenderTransform.Value;
if (e.Delta > 0)
{
CurrentScaleLevel++;
m.ScaleAtPrepend(1.1, 1.1, p.X, p.Y);
}
else
{
CurrentScaleLevel--;
m.ScaleAtPrepend(1/1.1, 1/1.1, p.X, p.Y);
}
Canvas.SetLeft(element, Canvas.GetLeft(element) + m.OffsetX);
Canvas.SetTop(element, Canvas.GetTop(element) + m.OffsetY);
m.Translate(-m.OffsetX, -m.OffsetY);
element.RenderTransform = new MatrixTransform(m);
}
e.Handled = true;
}
影響兩個對象就好了,就像它應該。
天才。有時候,你需要的只是第二組眼睛。 – Puppy 2010-09-10 14:26:27