내 MainPage에서 StackPanel을 여러 가지 사각형으로 채우고 모두 마진을 (0,5,0,5)로 설정합니다. 사용자가이 사각형을 수평으로 만 이동하도록 허용하고 싶습니다. Rectangle에는 Mouse 이벤트가 없으므로 포인터를 사용하여이를 수행합니다. 흐름은 다음과 같습니다. 사용자가 사각형을 선택하여 선택하고, 커서가 사용자에게 시각적 큐를 제공하도록 변경하고, 사용자가 사각형을 왼쪽이나 오른쪽으로 드래그합니다. (Stackpanel에는 수직 스크롤 뷰어가 있습니다. 여기마우스/포인터 이벤트처럼 Rectangle이 터치 이벤트에 반응하도록하려면 어떻게해야합니까?
private void Rectangle_FirstClick(object sender, EventArgs e)
{
// Give rectangle a white border to imply selection
Rectangle myControl = sender as Rectangle;
myControl.StrokeThickness = 1;
myControl.Stroke = new SolidColorBrush(Color.FromArgb(255, 240, 240, 240));
// Provide visual cue to mouse users by changing the pointer immediately
Window.Current.CoreWindow.PointerCursor = new Windows.UI.Core.CoreCursor(Windows.UI.Core.CoreCursorType.SizeWestEast, 0);
// Handle mouse leaving/re-entering the track piece
myControl.PointerEntered += MyControl_PointerEntered;
myControl.PointerExited += MyControl_PointerExited;
// Handle the drag event
myControl.PointerPressed += MyControl_PointerPressed;
myControl.PointerReleased += MyControl_PointerReleased;
myControl.PointerMoved += MyControl_PointerMoved;
}
가이 코드는 마우스 위대한 작품
bool PossibleDragStart = false;
Point InitialDragPoint = new Point(0, 0);
private void MyControl_PointerExited(object sender, PointerRoutedEventArgs e)
{
Window.Current.CoreWindow.PointerCursor = new Windows.UI.Core.CoreCursor(Windows.UI.Core.CoreCursorType.Arrow, 0);
}
private void MyControl_PointerEntered(object sender, PointerRoutedEventArgs e)
{
Window.Current.CoreWindow.PointerCursor = new Windows.UI.Core.CoreCursor(Windows.UI.Core.CoreCursorType.SizeWestEast, 0);
}
private void MyControl_PointerPressed(object sender, PointerRoutedEventArgs e)
{
PossibleDragStart = true;
InitialDragPoint = e.GetCurrentPoint(sender as Rectangle).Position;
}
private void MyControl_PointerReleased(object sender, PointerRoutedEventArgs e)
{
PossibleDragStart = false;
}
private void MyControl_PointerMoved(object sender, PointerRoutedEventArgs e)
{
// If pointer pressed without release, and then moved, we are dragging
if (PossibleDragStart)
{
Point CurrentDragPoint = e.GetCurrentPoint(AudioTracksRightContainer).Position;
StatusBar.Text = CurrentDragPoint.X.ToString();
// Calculate drag offset by subtracting Current Position from Initial Position
double SegmentMargin = CurrentDragPoint.X - InitialDragPoint.X;
// Move the Rectangle with the pointer drag
Rectangle trackSegment = sender as Rectangle;
trackSegment.Margin = new Thickness(SegmentMargin, 5, 0, 5);
}
}
개별 이벤트 핸들러,하지만 난 터치를 위해 그것을 사용하려고하면, 내가해야 눌러-과 : 여기 내 C# 코드입니다 드래그를 시작하기를 원한다. 그리고 심지어 사각형은 머무르기 전에 몇 개의 단위 만 움직인다. 나는 왜 행동이 다른지 잘 모르겠습니다.
이 코드의 또 다른 문제점은 직사각형이 너무 좁아서 빠르게 드래그하고 사각형이 커서를 따라갈 수없는 경우 커서가 사각형 경계를 벗어 났을 때 드래그를 중지한다는 것입니다. 터치가 작동하지 않는 것보다 훨씬 작은 문제이지만, 그럼에도 불구하고 조금 성가시다.
감사의 말 Rob, 완벽하게 작동하고 코드를 간소화했습니다. 나는 ManipulationMode를 인식하지 못했지만, 지금 나는 알고있다 :) – Freakishly