Windows 8 저장소 응용 프로그램의 StackPanel에 draggable 요소가 있습니다. 내 목표는 간단합니다. 화면의 어딘가에 항목을 드래그하면 사용자가 드래그를 중지 한 직후 요소가 원래 시작 위치로 돌아갑니다. 작품의TranslateTransform은 Windows 8 저장소 응용 프로그램에서 다중 변환 후 요소를 너무 많이 상쇄합니다.
private void grdCover_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
Grid coverControl = sender as Grid;
double xOffset = -e.Cumulative.Translation.X;
double yOffset = -e.Cumulative.Translation.Y;
if (coverControl.RenderTransform is TranslateTransform)
{
TranslateTransform existingTransform = coverControl.RenderTransform as TranslateTransform;
existingTransform.X += xOffset;
existingTransform.Y += yOffset;
}
else
{
TranslateTransform transform = new TranslateTransform();
transform.X = xOffset;
transform.Y = yOffset;
coverControl.RenderTransform = transform;
}
}
코드 정렬 :
나는이 작업을 수행하기위한 것입니다 다음과 같은 코드가 있습니다. 화면은 응용 프로그램 시작시 다음과 같습니다
H가 아니라 내가 먼저 다시 점프 H 요소를 끌어 U.가 보이는 바닥 요소와 정렬과 같은 상위 요소, 잘 어울리는 위치에 놓이거나 최소한의 어긋남은 너무 적어 육안으로는 거의 감지 할 수 없습니다. I 드래그하고 이와 같은 더 많은 오정렬 얻는 H 소자 해제 계속 같이 15-20 드러그 H 소자 완전히 잘못 도착 이동
후을 :
문제는 포인트 객체가 픽셀로 변환 될 때 이중 값의 반올림 오류로 인한 것일 수 있지만 이는 단지 추측에 불과합니다. 또한 내 PC와 같은 고해상도 장치의 경우 Visual Studio의 Windows 시뮬레이터와 같이 해상도가 낮은 것보다 눈에 띄게 표시되기 위해 더 많은 움직임이 필요합니다.
이 문제와 관련이있을 수 있습니다 일부 다른 코드 :
private void Grid_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
TranslateTransform translateTransform = (sender as Grid).RenderTransform as TranslateTransform;
translateTransform.X += e.Delta.Translation.X;
translateTransform.Y += e.Delta.Translation.Y;
}
내가도에서 요소를 중지하는 대신에 다음과 같은 이벤트 핸들러를 가지고 : 나는 다음과 같은 코드로 드래그 작업을 수행
을 경우
private void grdCover_ManipulationInertiaStarting(object sender, ManipulationInertiaStartingRoutedEventArgs e)
{
e.TranslationBehavior.DesiredDeceleration = 10000000000000000;
e.Handled = true;
}
당신은 내가 앉아야에 원하는 감속을 설정하고 싶었 궁금 : 사용자가 요소를 드래그 완료 후 화면에 너무 많은 이동 ble.Max는 화면에서 더 이상 "미끄러지는"움직임을 차단하지만 예외가 없다는 예외가 있습니다. 그래서 대신이 임의의 큰 값을 선택했습니다.
레이아웃 루트 나 이동 요소 또는 해당 컨테이너에 여분의 여백이나 패딩이 없습니다.
모든 아이디어를 환영합니다.
감사합니다. Andras