จัดการพื้นที่ที่คุณสามารถเคลื่อนย้ายสิ่งของได้ (Silverlight)

ฉันกำลังคิดถึงวิธีที่ดีกว่าในการจัดการ "พื้นที่ทำงาน" ในแอปพลิเคชันของฉัน ซึ่งผู้ใช้สามารถย้ายสิ่งต่าง ๆ ในพื้นที่นี้ และสามารถแพนได้ เป็นต้น

ลองนึกภาพว่าฉันมีอินเทอร์เฟซแอปพลิเคชันของฉัน โดยมีปุ่มบางปุ่มอยู่รอบๆ มุมมองแบบต้นไม้ ฯลฯ และตรงกลางเป็น Canvas ที่มีวิดเจ็ตบางอย่างที่ผู้ใช้สามารถย้ายและใช้งานได้ และเขาสามารถเลื่อนพื้นที่นี้เพื่อย้ายเข้าไปได้

สำหรับกระทะ ฉันคิดว่าจะจัดการ MouseLeftButtonDown ในพื้นที่นี้ (ซึ่งเปลี่ยนบูลีน "UserMoving" เป็น true) และบน MouseMove เพื่อนำไปใช้กับการแปลในพื้นที่ (จาก Delta ระหว่าง 2 เหตุการณ์) จนกระทั่งฉัน ตรวจจับ MouseLeftButtonUp เพื่อทราบว่าเขาได้หยุดแล้ว (UserMoving to false) ปัญหาคือถ้าผู้ใช้ "ปุ่มซ้ายของเมาส์ขึ้น" ไม่อยู่บนพื้นที่นั้นเอง (เป็น Canvas) ฉันจะไม่มีทางรู้เลยว่าเขาปล่อยเมาส์ อะไรจะดีที่สุดในการจัดการความจริงที่ว่าเขาสามารถปล่อยแพน (หรือการลากและวางวิดเจ็ต) ได้ทุกที่ในแอปพลิเคชัน

มีใครจัดการเรื่องแบบนั้นแล้วและสามารถช่วยฉันได้ไหม?


person Stéphane. D.    schedule 23.01.2011    source แหล่งที่มา


คำตอบ (1)


คุณควรเรียก UIElement.CaptureMouse บน Canvas ของคุณโดยเลื่อนเมาส์ลง การดำเนินการนี้จะทำให้ Canvas รับเหตุการณ์เมาส์ แม้ว่าผู้ใช้จะย้ายออกนอกภูมิภาคก็ตาม

เมื่อเลื่อนเมาส์ขึ้น ให้โทร ปล่อยMouseCapture

person Reed Copsey    schedule 23.01.2011